void* signal_catcher(void *c) { int sig; int err; addSignalHandlerName(); print_debug("Signal catcher created."); while(1) { print_debug("Waiting for a signal..."); err=sigwait ( &sigwait_signal_set, &sig ); print_debug_variable("Signal received!.",(err|| sig)); // if ((err || sig != SIGINT) && (err || sig !=SIGUSR1)) // abort(); if (err || sig ==SIGINT) break; if (err || sig ==SIGUSR1) { last_signal=SIGUSR1; counting_sem_signal(access_controller); } } //ya es SIGINT. notificamos y nos vamos last_signal=SIGINT; counting_sem_signal(access_controller); return NULL; }
void* server_thread(void* ptr) { message_t* msg; // Setup our pointer to the mailbox (it was created by main) mbox = (sys_mbox_t*) ptr; // Mark server as running serv_up = 1; // Sequence for pseudo-random numbers srand(0); // Server must wait for a message in the mailbox, // execute the desired command and write the result back in the message while (server_is_up()) { msg=(void*) mbox_fetch(mbox); switch (msg->tipo) { case RANDOM: if ( execute_random_service(msg) != 0) { fprintf(stderr,"ERROR when executing RANDOM action\n"); } break; case TIME: if (excute_time_service(msg) != 0) { fprintf(stderr,"ERROR when executing TIME action\n"); } break; case NONE: fprintf(logfile,"Server. NONE message received. Doing nothing\n"); default: break; } // Signal client. Operation done counting_sem_signal(msg->op_completed); } // Server must shutdown fprintf(logfile,"\n....Server is down...\n"); pthread_exit(NULL); }