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);
16 /* Insert to the rear of machine pile queue */
17 void mcpileenqueue(prefetchpile_t *node) {
18 prefetchpile_t *tmp, *prev;
19 if(mcqueue.front == NULL && mcqueue.rear == NULL) {
20 mcqueue.front = mcqueue.rear = node;
22 tmp = mcqueue.rear->next = node;
31 /* Return the node pointed to by the front ptr of the queue */
32 prefetchpile_t *mcpiledequeue(void) {
33 prefetchpile_t *retnode;
34 if(mcqueue.front == NULL) {
35 printf("Machune pile queue empty: Underfloe %s %d\n", __FILE__, __LINE__);
38 retnode = mcqueue.front;
39 mcqueue.front = mcqueue.front->next;
40 if (mcqueue.front == NULL)
47 void mcpiledelete(void) {
48 /* Remove each element */
49 while(mcqueue.front != NULL)
51 mcqueue.front = mcqueue.rear = NULL;
55 void mcpiledisplay() {
58 prefetchpile_t *tmp = mcqueue.front;
60 printf("Remote machine id = %d\n", tmp->mid);
65 /* Delete prefetchpile_t and everything it points to */
66 void mcdealloc(prefetchpile_t *node) {
67 prefetchpile_t *prefetchpile_ptr;
68 prefetchpile_t *prefetchpile_next_ptr;
69 objpile_t *objpile_ptr;
70 objpile_t *objpile_next_ptr;
72 prefetchpile_ptr = node;
74 while (prefetchpile_ptr != NULL)
76 objpile_ptr = prefetchpile_ptr->objpiles;
77 while (objpile_ptr != NULL)
79 if (objpile_ptr->numoffset > 0)
80 free(objpile_ptr->offset);
81 objpile_next_ptr = objpile_ptr->next;
83 objpile_ptr = objpile_next_ptr;
85 prefetchpile_next_ptr = prefetchpile_ptr->next;
86 free(prefetchpile_ptr);
87 prefetchpile_ptr = prefetchpile_next_ptr;