Exemple #1
0
/*-------------------------------------------------------------------*/
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 */
Exemple #2
0
/*-------------------------------------------------------------------*/
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 */
Exemple #3
0
/*-------------------------------------------------------------------*/
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 */