void check_the_q(int next_customer){ int i, flag_hot_seat = OCCUPIED, flag_wait_seat = OCCUPIED, max ; flag_hot_seat = check_if_free() ; if( flag_hot_seat == FREE ){ flag_wait_seat = check_customer_q(); if( flag_wait_seat == OCCUPIED ){ pos = get_position(); sleep(2); if( customer[pos].value != 0 ) printf("\n\t\t\t\t\t^^^^^customer %d removed from queue and put in hot seat, cutting time = %d^^^^\n", customer[pos].pos, customer[pos].value); wake_up_barber(customer[pos].value); customer[pos].time = 0; customer[pos].value = 0; customer[pos].pos = 0; } if( next_customer != 0 && flag_hot_seat == FREE ){ flag_wait_seat = check_customer_q(); if( flag_wait_seat == FREE ) wake_up_barber(next_customer); else{ pos = get_free_position(); if( pos >= 0 ){ sleep(2); if( next_customer != 0 ) printf("\t\t----customer %d moved to queue , cutting time = %d----\n", timer, next_customer); customer[pos].value = next_customer; customer[pos].time = 1 ; customer[pos].pos = timer; } } } } else if( flag_hot_seat != FREE ){ pos = get_free_position(); if( pos >= 0 ){ sleep(2); if( next_customer != 0 ) printf("\t\t----customer %d moved to queue , cutting time = %d----\n", timer, next_customer); customer[pos].value = next_customer; customer[pos].time = 1 ; customer[pos].pos = timer; } } else{ sleep(2); printf("\n\t\t--------->customer %d left, cutting time = %d\n",timer,next_customer); } }
int start_loading(struct opt_s *opt, struct buffer_entity *be, struct sender_tracking *st) { long nuf; int err; skip_missing(opt, st, SKIP_LOADED); D("Packets loaded is %lu, packet probed %ld", st->packets_loaded, st->n_packets_probed); if (st->files_loaded == st->n_files_probed) { D("Loaded up to n_files!"); return DONTRYLOADNOMORE; } err = afi_start_loading(opt->fi, st->files_loaded, st->files_in_loading > 0); if (err) { if (err == 1) { return DONTRYLOADNOMORE; } return err; } afi_update_metadata(opt->fi, &st->n_files_probed, &st->n_packets_probed, &st->status_probed); nuf = MIN((st->n_packets_probed - st->packets_loaded), ((unsigned long)opt->buf_num_elems)); if (nuf == 0) { E("Metadata error on recording %s. Cant load 0 packets", opt->filename); return DONTRYLOADNOMORE; } /* TODO: Not checking if FH_ONDISK is set */ D("Requested a load start on file %lu", st->files_loaded); if (be == NULL) { if (check_if_free(opt->membranch) != 0) { D("No more free buffers"); if (st->files_in_loading != 0) { D("wont loadup since no more free buffers and we have files in loading"); return DONTRYLOADNOMORE; } } be = get_free(opt->membranch, opt, (void *)(&(st->files_loaded)), NULL, 1); st->allocated_to_load--; } /* Reacquiring just updates the file number we want */ else { be->acquire((void *)be, opt, &(st->files_loaded)); } CHECK_AND_EXIT(be); st->files_in_loading++; D("Setting seqnum %lu to load %lu packets", st->files_loaded, nuf); LOCK(be->headlock); unsigned long *inc; be->simple_get_writebuf(be, &inc); *inc = nuf * (opt->packet_size); be->set_ready(be, 1); pthread_cond_signal(be->iosignal); UNLOCK(be->headlock); D("Loading request complete for id %lu", st->files_loaded); st->packets_loaded += nuf; st->files_loaded++; return 0; }