bug fixes and add machine pile queue DS that saves oids and offsets meant for
[IRC.git] / Robust / src / Runtime / DSTM / interface / mcpileq.c
1 #include "mcpileq.h"
2
3 mcpileq_t mcqueue;
4
5 void mcpileqInit(void) {
6         /* Initialize machine queue that containing prefetch oids and offset values  sorted by remote machineid */  
7         mcqueue.front = mcqueue.rear = NULL;
8         pthread_mutex_init(&mcqueue.qlock, NULL); 
9         pthread_cond_init(&mcqueue.qcond, NULL); 
10 }
11
12 /* Insert to the rear of machine pile queue */
13 void mcpileenqueue(prefetchpile_t *node) {
14         if(mcqueue.front == NULL && mcqueue.rear == NULL) {
15                 mcqueue.front = mcqueue.rear = node;
16         } else {
17                 node->next = NULL;
18                 mcqueue.rear->next = node;
19                 mcqueue.rear = node;
20         }
21 }
22
23 /* Return the node pointed to by the front ptr of the queue */
24 prefetchpile_t *mcpiledequeue(void) {
25         prefetchpile_t *retnode;
26         if(mcqueue.front == NULL) {
27                 printf("Machune pile queue empty: Underfloe %s %d\n", __FILE__, __LINE__);
28                 return NULL;
29         }
30         retnode = mcqueue.front;
31         mcqueue.front = mcqueue.front->next;
32
33         return retnode;
34 }
35
36 /* Delete the node pointed to by the front ptr of the queue */
37 void delnode() {
38         prefetchpile_t *delnode;
39         if((mcqueue.front == NULL) && (mcqueue.rear == NULL)) {
40                 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
41                 return;
42         } else if ((mcqueue.front == mcqueue.rear) && mcqueue.front != NULL && mcqueue.rear != NULL) {
43                 printf("TEST1\n");
44                 free(mcqueue.front);
45                 mcqueue.front = mcqueue.rear = NULL;
46         } else {
47                 delnode = mcqueue.front;
48                 mcqueue.front = mcqueue.front->next;
49                 printf("TEST2\n");
50                 free(delnode);
51         }
52 }
53
54 void mcpiledelete(void) {
55         /* Remove each element */
56         while(mcqueue.front != NULL)
57                 delqnode();
58         mcqueue.front = mcqueue.rear = NULL;
59 }
60
61
62 void mcpiledisplay() {
63         int mid;
64
65         prefetchpile_t *tmp = mcqueue.front;
66         while(tmp != NULL) {
67                 printf("Remote machine id = %d\n", tmp->mid);
68                 tmp = tmp->next;
69         }
70 }
71
72
73
74
75
76
77