void *MaekawaProcess(void* queue) { printf("MaekawaProcess Thread created\n"); wqueue<Packet*>*m_queue=(wqueue<Packet*>*)queue; MaekawaAlgorithm *mnode = MaekawaAlgorithm::getInstance(); sleep(5); // Remove 1 item at a time and process it. Blocks if no items are // available to process. for (int i = 0;; i++) { printf("MaekawaProcessing Thread , loop %d - waiting for item...\n", i); Packet* item = m_queue->remove(); //printf("thread loop %d - got one item\n", i); printf("Received: messageType - %d, SEQ number - %ld\n",item->TYPE, item->SEQ); switch (item->TYPE) { case MAKE_REQUEST: printf(" ## MAKE_REQUEST received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveMakeRequest(*item); break; case REQUEST: printf(" ## REQUEST received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveRequest(*item); break; case INQUIRE: printf(" ## INQUIRE received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveInquire(*item); break; case FAILED: printf(" ## FAILED received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveFailed(*item); break; case RELEASE: printf(" ## RELEASE received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveRelease(*item); break; case RELINQUISH: printf(" ## RELINQUISH received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveRelinquish(*item); break; case LOCKED: printf(" ## LOCKED received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveLocked(*item); break; default: break; } delete item; } return NULL; }
void *MaekawaProcess(void* iqueue) { printf("MaekawaProcess Thread created\n"); long messageCounter = 0; long timeCounter = 0; //getting time for CS grant long utime, seconds, useconds; queue<struct timeval> timequeue; //struct timeval start1; wqueue<Packet*>*m_queue=(wqueue<Packet*>*)iqueue; MaekawaAlgorithm *mnode = MaekawaAlgorithm::getInstance(); sleep(5); long s=1; long e =0; // Remove 1 item at a time and process it. Blocks if no items are // available to process. for (int i = 0;; i++) { printf("MaekawaProcessing Thread , loop %d - waiting for item...\n", i); Packet* item = m_queue->remove(); //printf("thread loop %d - got one item\n", i); //uncomment for unreliable //if(!randDecision()){ // printf("===>Missed a packet from Node %d(Origin: %d) and packet type is %d\n",item->sender,item->ORIGIN,item->TYPE); // continue; //} printf("Received: messageType - %d, SEQ number - %ld\n",item->TYPE, item->SEQ); switch (item->TYPE) { case MAKE_REQUEST: printf(" ## MAKE_REQUEST received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); struct timeval start; gettimeofday(&start, NULL); timequeue.push(start); s = start.tv_sec; printf("start time: %l\n",s); mnode->receiveMakeRequest(*item); break; case REQUEST: printf(" ## REQUEST received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveRequest(*item); if(item->ORIGIN != mnode->processID) messageCounter++; break; case INQUIRE: printf(" ## INQUIRE received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveInquire(*item); if(item->ORIGIN != mnode->processID) messageCounter++; break; case FAILED: printf(" ## FAILED received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveFailed(*item); if(item->ORIGIN != mnode->processID) messageCounter++; break; case RELEASE: printf(" ## RELEASE received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveRelease(*item); if(item->ORIGIN != mnode->processID) messageCounter++; break; case RELINQUISH: printf(" ## RELINQUISH received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->receiveRelinquish(*item); if(item->ORIGIN != mnode->processID) messageCounter++; break; case LOCKED: printf(" ## LOCKED received from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); mnode->flagforCS = false; struct timeval end; gettimeofday(&end, NULL); e = end.tv_sec; struct timeval start1; start1 = timequeue.front(); seconds = end.tv_sec - start1.tv_sec; useconds = end.tv_usec - start1.tv_usec; utime = ((seconds) * 1000000 + useconds) + 0.5; printf("end time:%l, totaltime: %l",e,utime); mnode->receiveLocked(*item); if(mnode->flagforCS){//node entered CS on this Locked //struct timeval end; //gettimeofday(&end, NULL); //struct timeval start = timequeue.front(); timequeue.pop(); //seconds = end.tv_sec - start.tv_sec; //useconds = end.tv_usec - start.tv_usec; //utime = ((seconds) * 1000000 + useconds) + 0.5; timeCounter += utime; } if(item->ORIGIN != mnode->processID) messageCounter++; break; case END_PROCESS: printf("END_PROCESS recieved from Node %d and packet type is %d\n",item->ORIGIN,item->TYPE); delete item; endProcessing(mnode->processID,messageCounter,timeCounter); break; default: break; } delete item; } return NULL; }