This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
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 /*
14 void mcpileenqueue(prefetchpile_t *node) {
15         if(mcqueue.front == NULL && mcqueue.rear == NULL) {
16                 mcqueue.front = mcqueue.rear = node;
17         } else {
18                 node->next = NULL;
19                 mcqueue.rear->next = node;
20                 mcqueue.rear = node;
21         }
22 }
23 */
24
25 /* Insert to the rear of machine pile queue */
26 void mcpileenqueue(prefetchpile_t *node) {
27         prefetchpile_t *tmp, *prev;
28         if(mcqueue.front == NULL && mcqueue.rear == NULL) {
29                 tmp = mcqueue.front = node;
30                 while(tmp != NULL) {
31                         prev = tmp;
32                         tmp = tmp->next;
33                 }
34                 mcqueue.rear = prev;
35         } else {
36                 tmp = mcqueue.rear->next = node;
37                 while(tmp != NULL) {
38                         prev = tmp;
39                         tmp = tmp->next;
40                 }
41                 mcqueue.rear = prev;
42         }
43 }
44
45 /* Return the node pointed to by the front ptr of the queue */
46 prefetchpile_t *mcpiledequeue(void) {
47         prefetchpile_t *retnode;
48         if(mcqueue.front == NULL) {
49                 printf("Machune pile queue empty: Underfloe %s %d\n", __FILE__, __LINE__);
50                 return NULL;
51         }
52         retnode = mcqueue.front;
53         mcqueue.front = mcqueue.front->next;
54         retnode->next = NULL;
55
56         return retnode;
57 }
58
59 /* Delete the node pointed to by the front ptr of the queue */
60 void delnode() {
61         prefetchpile_t *delnode;
62         if((mcqueue.front == NULL) && (mcqueue.rear == NULL)) {
63                 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
64                 return;
65         } else if ((mcqueue.front == mcqueue.rear) && mcqueue.front != NULL && mcqueue.rear != NULL) {
66                 printf("TEST1\n");
67                 free(mcqueue.front);
68                 mcqueue.front = mcqueue.rear = NULL;
69         } else {
70                 delnode = mcqueue.front;
71                 mcqueue.front = mcqueue.front->next;
72                 printf("TEST2\n");
73                 free(delnode);
74         }
75 }
76
77 void mcpiledelete(void) {
78         /* Remove each element */
79         while(mcqueue.front != NULL)
80                 delqnode();
81         mcqueue.front = mcqueue.rear = NULL;
82 }
83
84
85 void mcpiledisplay() {
86         int mid;
87
88         prefetchpile_t *tmp = mcqueue.front;
89         while(tmp != NULL) {
90                 printf("Remote machine id = %d\n", tmp->mid);
91                 tmp = tmp->next;
92         }
93 }
94
95 void mcdealloc(prefetchpile_t *node) {
96         /* Remove the offset ptr and linked lists of objpile_t */
97         objpile_t *delnode;
98         while(node->objpiles != NULL) {
99                 node->objpiles->offset = NULL;
100                 delnode = node->objpiles;
101                 node->objpiles = node->objpiles->next;
102                 free(delnode);
103                 node->objpiles->next = NULL;
104         }
105         free(node);
106         node->next = NULL;
107 }