/*-------------------------------------------------------------------*/ void machine_check_crwpend() { /* Signal waiting CPUs that a Channel Report is pending */ OBTAIN_INTLOCK(NULL); ON_IC_CHANRPT; WAKEUP_CPUS_MASK (sysblk.waiting_mask); RELEASE_INTLOCK(NULL); } /* end function machine_check_crwpend */
/*-------------------------------------------------------------------*/ BOOL WINAPI console_ctrl_handler (DWORD signo) { int i; SetConsoleCtrlHandler(console_ctrl_handler, FALSE); // turn handler off while processing switch ( signo ) { case CTRL_BREAK_EVENT: logmsg(_("HHCIN050ICtrl-Break intercepted. Interrupt Key depressed simulated.\n")); OBTAIN_INTLOCK(NULL); ON_IC_INTKEY; /* Signal waiting CPUs that an interrupt is pending */ WAKEUP_CPUS_MASK (sysblk.waiting_mask); RELEASE_INTLOCK(NULL); SetConsoleCtrlHandler(console_ctrl_handler, TRUE); // reset handler return TRUE; break; case CTRL_C_EVENT: logmsg(_("HHCIN022I Ctrl-C intercepted\n")); SetConsoleCtrlHandler(console_ctrl_handler, TRUE); // reset handler return TRUE; break; case CTRL_CLOSE_EVENT: case CTRL_SHUTDOWN_EVENT: case CTRL_LOGOFF_EVENT: if ( !sysblk.shutdown ) // (system shutdown not initiated) { logmsg(_("HHCIN021ICLOSE Event received, SHUTDOWN Immediate starting...\n")); sysblk.shutimmed = TRUE; do_shutdown(); // logmsg("%s(%d): return from shutdown\n", __FILE__, __LINE__ ); /* debug */ for ( i = 0; i < 120; i++ ) { if ( sysblk.shutdown && sysblk.shutfini ) { // logmsg("%s(%d): %d shutdown completed\n", /* debug */ // __FILE__, __LINE__, i ); /* debug */ sleep(1); break; } else { // logmsg("%s(%d): %d waiting for shutdown to complete\n", /* debug */ // __FILE__, __LINE__, i ); /* debug */ sleep(1); } } socket_deinit(); } else { logmsg(_("HHCIN023W CLOSE Event received, SHUTDOWN previously requested...\n")); } usleep(10000); return FALSE; break; default: return FALSE; } } /* end function console_ctrl_handler */
/*-------------------------------------------------------------------*/ static BOOL WINAPI console_ctrl_handler (DWORD signo) { int i; SetConsoleCtrlHandler(console_ctrl_handler, FALSE); // turn handler off while processing switch ( signo ) { case CTRL_BREAK_EVENT: WRMSG (HHC01400, "I"); OBTAIN_INTLOCK(NULL); ON_IC_INTKEY; /* Signal waiting CPUs that an interrupt is pending */ WAKEUP_CPUS_MASK (sysblk.waiting_mask); RELEASE_INTLOCK(NULL); SetConsoleCtrlHandler(console_ctrl_handler, TRUE); // reset handler return TRUE; break; case CTRL_C_EVENT: WRMSG(HHC01401, "I"); SetConsoleCtrlHandler(console_ctrl_handler, TRUE); // reset handler return TRUE; break; case CTRL_CLOSE_EVENT: case CTRL_SHUTDOWN_EVENT: case CTRL_LOGOFF_EVENT: if ( !sysblk.shutdown ) // (system shutdown not initiated) { WRMSG(HHC01402, "I", ( signo == CTRL_CLOSE_EVENT ? "close" : signo == CTRL_SHUTDOWN_EVENT ? "shutdown" : "logoff" ), ( signo == CTRL_CLOSE_EVENT ? "immediate " : "" ) ); if ( signo == CTRL_CLOSE_EVENT ) sysblk.shutimmed = TRUE; do_shutdown(); // logmsg("%s(%d): return from shutdown\n", __FILE__, __LINE__ ); /* debug */ for ( i = 0; i < 120; i++ ) { if ( sysblk.shutdown && sysblk.shutfini ) { // logmsg("%s(%d): %d shutdown completed\n", /* debug */ // __FILE__, __LINE__, i ); /* debug */ break; } else { // logmsg("%s(%d): %d waiting for shutdown to complete\n", /* debug */ // __FILE__, __LINE__, i ); /* debug */ sleep(1); } } if ( !sysblk.shutfini ) { sysblk.shutimmed = TRUE; do_shutdown(); } } else { sysblk.shutimmed = TRUE; do_shutdown(); WRMSG(HHC01403, "W", ( signo == CTRL_CLOSE_EVENT ? "close" : signo == CTRL_SHUTDOWN_EVENT ? "shutdown" : "logoff" ) ); } return TRUE; break; default: return FALSE; } } /* end function console_ctrl_handler */