/* Process the pakcets in Q1 and transfer to Q2 when enough tokens */ void ProcessPacket(){ My402ListElem *find = NULL; Packet_desc *p = NULL; find=My402ListFirst(&Q1_node); if(find->obj == NULL){ fprintf(stderr,"Error: Obj is NULL"); pthread_exit(0); } p = (Packet_desc*)find->obj; if(p->tokens <= token_limit){ // move this to Q2 token_limit -= p->tokens; // total time in Q1 p->total_Q1_time = GetMTimeOfDay()- p->Q1_time_enters; fprintf(stdout, "%012.3lfms: p%d leaves Q1, time in Q1 = %.3lfms, tokens bucket now has %d token\n",GetMTimeOfDay(),p->name_ID,p->total_Q1_time,token_limit); if(My402ListEmpty(&Q2_node)){ // signal the condition about the queue not empty p->Q2_time_enters = GetMTimeOfDay(); // Q2_time_enters[p->name_ID] = GetMTimeOfDay(); fprintf(stdout, "%012.3lfms: p%d enters Q2\n",GetMTimeOfDay(),p->name_ID); My402ListAppend(&Q2_node, (void*)p); curr_q2_size = 1; /* signal the condition variable queue*/ pthread_cond_signal(&serverQ); find = My402ListFind(&Q1_node, (void*)p); My402ListUnlink(&Q1_node, find); }else{ p->Q2_time_enters = GetMTimeOfDay(); // Q2_time_enters[p->name_ID] = GetMTimeOfDay(); fprintf(stdout, "%012.3lfms: p%d enters Q2\n",GetMTimeOfDay(),p->name_ID); My402ListAppend(&Q2_node, (void*)p); /* gaurd set true */ curr_q2_size = 1; find = My402ListFind(&Q1_node, (void*)p); My402ListUnlink(&Q1_node, find); } } }
static void FindAllInList(My402List *pList, int num_items) { int i=0; for (i=0; i < num_items; i++) { if (My402ListFind(pList, (void*)i) == NULL) { fprintf(stderr, "Cannot find %1d in FindAllInList().\n", i); } } }