This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 #include "mcpileq.h"
2
3 mcpileq_t mcqueue; //Global queue
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         //Intiliaze and set machile pile queue's mutex attribute
9         pthread_mutexattr_init(&mcqueue.qlockattr);
10         pthread_mutexattr_settype(&mcqueue.qlockattr, PTHREAD_MUTEX_RECURSIVE_NP);
11         //pthread_mutex_init(&mcqueue.qlock, NULL); 
12         pthread_mutex_init(&mcqueue.qlock,&mcqueue.qlockattr); 
13         pthread_cond_init(&mcqueue.qcond, NULL); 
14 }
15
16 /* Insert to the rear of machine pile queue */
17 void mcpileenqueue(prefetchpile_t *node, prefetchpile_t *tail) {
18         if(mcqueue.front == NULL && mcqueue.rear == NULL) {
19                 mcqueue.front = node;
20                 mcqueue.rear = tail;
21         } else {
22                 mcqueue.rear->next = node;
23                 mcqueue.rear = tail;
24         }
25 }
26
27 /* Return the node pointed to by the front ptr of the queue */
28 prefetchpile_t *mcpiledequeue(void) {
29         prefetchpile_t *retnode;
30         if(mcqueue.front == NULL) {
31                 printf("Machine pile queue empty: Underflow %s %d\n", __FILE__, __LINE__);
32                 return NULL;
33         }
34         retnode = mcqueue.front;
35         mcqueue.front = mcqueue.front->next;
36         if (mcqueue.front == NULL)
37                 mcqueue.rear = NULL;
38         retnode->next = NULL;
39
40         return retnode;
41 }
42
43 void mcpiledelete(void) {
44         /* Remove each element */
45         while(mcqueue.front != NULL)
46                 delqnode();
47         mcqueue.front = mcqueue.rear = NULL;
48 }
49
50
51 void mcpiledisplay() {
52         int mid;
53
54         prefetchpile_t *tmp = mcqueue.front;
55         while(tmp != NULL) {
56                 printf("Remote machine id = %d\n", tmp->mid);
57                 tmp = tmp->next;
58         }
59 }
60
61 /* Delete prefetchpile_t and everything it points to */
62 void mcdealloc(prefetchpile_t *node) {
63         prefetchpile_t *prefetchpile_ptr;
64         prefetchpile_t *prefetchpile_next_ptr;
65         objpile_t *objpile_ptr;
66         objpile_t *objpile_next_ptr;
67
68         prefetchpile_ptr = node;
69
70         while (prefetchpile_ptr != NULL)
71         {
72                 prefetchpile_next_ptr = prefetchpile_ptr;
73                 while(prefetchpile_ptr->objpiles != NULL) {
74                         if(prefetchpile_ptr->objpiles->numoffset > 0) {
75                                 free(prefetchpile_ptr->objpiles->offset);
76                         }
77                         objpile_ptr = prefetchpile_ptr->objpiles;
78                         prefetchpile_ptr->objpiles = objpile_ptr->next;
79                         free(objpile_ptr);
80                 }
81                 prefetchpile_ptr = prefetchpile_next_ptr->next;
82                 free(prefetchpile_next_ptr);
83         }
84 }