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;
30 /*tmp = mcqueue.front = node;
35 mcqueue.rear = prev;*/
37 tmp = mcqueue.rear->next = node;
46 /* Return the node pointed to by the front ptr of the queue */
47 prefetchpile_t *mcpiledequeue(void) {
48 prefetchpile_t *retnode;
49 if(mcqueue.front == NULL) {
50 printf("Machune pile queue empty: Underfloe %s %d\n", __FILE__, __LINE__);
53 retnode = mcqueue.front;
54 mcqueue.front = mcqueue.front->next;
55 if (mcqueue.front == NULL)
62 /* Delete the node pointed to by the front ptr of the queue */
64 prefetchpile_t *delnode;
65 if((mcqueue.front == NULL) && (mcqueue.rear == NULL)) {
66 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
68 } else if ((mcqueue.front == mcqueue.rear) && mcqueue.front != NULL && mcqueue.rear != NULL) {
71 mcqueue.front = mcqueue.rear = NULL;
73 delnode = mcqueue.front;
74 mcqueue.front = mcqueue.front->next;
80 void mcpiledelete(void) {
81 /* Remove each element */
82 while(mcqueue.front != NULL)
84 mcqueue.front = mcqueue.rear = NULL;
88 void mcpiledisplay() {
91 prefetchpile_t *tmp = mcqueue.front;
93 printf("Remote machine id = %d\n", tmp->mid);
98 /* Delete prefetchpile_t and everything it points to */
99 void mcdealloc(prefetchpile_t *node) {
100 prefetchpile_t *prefetchpile_ptr;
101 prefetchpile_t *prefetchpile_next_ptr;
102 objpile_t *objpile_ptr;
103 objpile_t *objpile_next_ptr;
105 prefetchpile_ptr = node;
107 while (prefetchpile_ptr != NULL)
109 objpile_ptr = prefetchpile_ptr->objpiles;
110 while (objpile_ptr != NULL)
112 if (objpile_ptr->numoffset > 0)
113 free(objpile_ptr->offset);
114 objpile_next_ptr = objpile_ptr->next;
116 objpile_ptr = objpile_next_ptr;
118 prefetchpile_next_ptr = prefetchpile_ptr->next;
119 free(prefetchpile_ptr);
120 prefetchpile_ptr = prefetchpile_next_ptr;