for (;;) { sprintf(message_buffer,"master entering wait_for_wakeup"); report_message(MSG_TRACE); Signal = wait_for_wakeup (); sscanf(MERGE_Parameter,"%d",&linkNum); sprintf(message_buffer,"master received signal=%d; Action=%d; Parameter=%s %d",Signal,*MERGE_Action,MERGE_Parameter,linkNum); report_message(MSG_TRACE); /* Signal 10 is SIGUSR1 Signal 12 is SIGUSR2 Signal 35 is SIGWAKEUP (SIGRTMIN+1) */ switch (Signal) { case 0: sprintf(message_buffer,"master received signal 0"); report_message(MSG_TRACE); break; case SIGUSR1: sprintf(message_buffer,"master received signal SIGUSR1"); report_message(MSG_TRACE); break; case SIGUSR2: sprintf(message_buffer,"master received signal SIGUSR2"); report_message(MSG_TRACE); switch (*MERGE_Action) { case 0: sprintf(message_buffer,"master received Action 0"); report_message(MSG_TRACE); break; case DO_STOP: sprintf(message_buffer,"master received Action merge Stop"); report_message(MSG_TRACE); *MERGE_State = MERGE_DOINGSTOP; break; case DO_GO: sprintf(message_buffer,"master received Action merge Go"); report_message(MSG_TRACE); *MERGE_State = MERGE_DOINGGO; break; case DO_SETUP: sprintf(message_buffer,"master received Action merge Setup"); report_message(MSG_TRACE); *MERGE_State = MERGE_DOINGSETUP; break; case DO_RESET: sprintf(message_buffer,"master received Action merge Reset"); report_message(MSG_TRACE); *MERGE_State = MERGE_DOINGRESET; break; case DO_START: sprintf(message_buffer,"master received Action merge Start"); report_message(MSG_TRACE); *MERGE_State = MERGE_EXECUTING; break; case DO_PAUSE: sprintf(message_buffer,"master received Action merge Pause"); report_message(MSG_TRACE); *MERGE_State = MERGE_EXECUTING; break; case DO_RESUME: sprintf(message_buffer,"master received Action merge Resume"); report_message(MSG_TRACE); *MERGE_State = MERGE_EXECUTING; break; case 10: sprintf(message_buffer,"master received Action 10 - merge report"); report_message(MSG_TRACE); break; case 11: sprintf(message_buffer,"master received Action 11 - disconnect xfer stream"); report_message(MSG_TRACE); break; case 12: sprintf(message_buffer,"master received Action 12 - connect xfer stream"); report_message(MSG_TRACE); break; case LINK_STOP: sprintf(message_buffer,"master received Action 'link stop' for link %d",linkNum); report_message(MSG_TRACE); link_table[linkNum]->link_ctrl = LINK_STOP; link_table[linkNum]->link_state = LINK_DOINGSTOP; wakeup_link(Linkpid[linkNum]); break; case LINK_GO: sprintf(message_buffer,"master received Action 'link go' for link %d",linkNum); report_message(MSG_TRACE); link_table[linkNum]->link_ctrl = LINK_GO; link_table[linkNum]->link_state = LINK_DOINGGO; wakeup_link(Linkpid[linkNum]); break; case LINK_IDLE: sprintf(message_buffer,"master received Action 'link idle' for link %d",linkNum); report_message(MSG_TRACE); link_table[linkNum]->link_ctrl = LINK_IDLE; link_table[linkNum]->link_state = LINK_DOINGIDLE; wakeup_link(Linkpid[linkNum]); break; case STATS_CLR: sprintf(message_buffer,"master received Action stats Clear Statistics"); report_message(MSG_TRACE); *MERGE_State = MERGE_EXECUTING; break; default: sprintf(message_buffer,"Undefined Action %d received", *MERGE_Action); report_message(MSG_TRACE); break; } break; case 35: sprintf(message_buffer,"master received signal SIGWAKEUP"); report_message(MSG_TRACE); break; default: sprintf(message_buffer,"Unhandled Signal %d received", Signal); report_message(MSG_TRACE); break; } *MERGE_Signal = 0; /* clear signal */ *MERGE_Action = 0; /* and clear Action */ sprintf(message_buffer,"master done"); report_message(MSG_TRACE); }