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);
12 /* Insert to the rear of machine pile queue */
14 void mcpileenqueue(prefetchpile_t *node) {
15 if(mcqueue.front == NULL && mcqueue.rear == NULL) {
16 mcqueue.front = mcqueue.rear = node;
19 mcqueue.rear->next = node;
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 mcqueue.front = mcqueue.rear = node;
31 tmp = mcqueue.rear->next = node;
40 /* Return the node pointed to by the front ptr of the queue */
41 prefetchpile_t *mcpiledequeue(void) {
42 prefetchpile_t *retnode;
43 if(mcqueue.front == NULL) {
44 printf("Machune pile queue empty: Underfloe %s %d\n", __FILE__, __LINE__);
47 retnode = mcqueue.front;
48 mcqueue.front = mcqueue.front->next;
49 if (mcqueue.front == NULL)
56 void mcpiledelete(void) {
57 /* Remove each element */
58 while(mcqueue.front != NULL)
60 mcqueue.front = mcqueue.rear = NULL;
64 void mcpiledisplay() {
67 prefetchpile_t *tmp = mcqueue.front;
69 printf("Remote machine id = %d\n", tmp->mid);
74 /* Delete prefetchpile_t and everything it points to */
75 void mcdealloc(prefetchpile_t *node) {
76 prefetchpile_t *prefetchpile_ptr;
77 prefetchpile_t *prefetchpile_next_ptr;
78 objpile_t *objpile_ptr;
79 objpile_t *objpile_next_ptr;
81 prefetchpile_ptr = node;
83 while (prefetchpile_ptr != NULL)
85 objpile_ptr = prefetchpile_ptr->objpiles;
86 while (objpile_ptr != NULL)
88 if (objpile_ptr->numoffset > 0)
89 free(objpile_ptr->offset);
90 objpile_next_ptr = objpile_ptr->next;
92 objpile_ptr = objpile_next_ptr;
94 prefetchpile_next_ptr = prefetchpile_ptr->next;
95 free(prefetchpile_ptr);
96 prefetchpile_ptr = prefetchpile_next_ptr;