Example #1
0
int master_main(Master* M)
{
    ExceptionScope exScope;
    int volatile ret = 0;
    int ex;
    
    exception_begin_try(B(M), &exScope);
    
    switch ((ex = exception_try(B(M))))
    {
    case Try:
        master_init(M);
        master_start_log_writer(M);
        master_start_login(M);
        master_start_char_select(M);
        // Start the IPC thread now to avoid needing to hold the lock while the above processes start
        master_start_ipc_thread(M);
        master_main_loop(M);
        break;
    
    case Finally:
        master_deinit(M);
        break;
    
    default:
        printf(TERM_RED "[master_main] Unhandled exception (%i): %s\n" TERM_DEFAULT, ex, string_data(exception_get_message(B(M))));
        exception_handled(B(M));
        ret = ex;
        break;
    }
    
    exception_end_try_with_finally(B(M));
    
    return ret;
}
Example #2
0
int console_receive(MasterIpcThread* ipcThread, Master* M, ChildProcess* proc, int sourceId, IpcPacket* packet)
{
    ExceptionScope exScope;
    Console* volatile console   = NULL;
    int volatile ret            = false;
    int ex;
    
    exception_begin_try(B(ipcThread), &exScope);
    
    switch ((ex = exception_try(B(ipcThread))))
    {
    case Try:
        ret = console_do_receive(ipcThread, M, proc, sourceId, packet, &console);
        break;
    
    default:
        if (console)
            console_destroy(console);
        
        log_format(B(ipcThread), LogError, "[console_receive] Error (%i): %s", ex, string_data(exception_message(B(ipcThread))));
        
        exception_handled(B(ipcThread));
        break;
    }
    
    exception_end_try(B(ipcThread));
    
    return ret;
}
Example #3
0
int log_main(LogWriter* logWriter, const char* ipcPath)
{
    ExceptionScope exScope;
    int volatile ret = 0;
    int ex;
    
    exception_begin_try(B(logWriter), &exScope);
    
    switch ((ex = exception_try(B(logWriter))))
    {
    case Try:
        log_writer_init(logWriter, ipcPath);
        log_writer_main_loop(logWriter);
        break;
    
    case Finally:
        log_writer_deinit(logWriter);
        break;
    
    default:
        printf("[log_main] Unhandled exception (%i): %s\n", ex, string_data(exception_get_message(B(logWriter))));
        exception_handled(B(logWriter));
        ret = ex;
        break;
    }
    
    exception_end_try_with_finally(B(logWriter));
    
    return ret;
}
Example #4
0
DECLARE_TEST(exception, exception_handler) {
    int result;

    if (system_debugger_attached() || (system_platform() == PLATFORM_PNACL))
        return 0; //Don't do exception tests with debugger attached

    _exception_handler_called = false;
    log_enable_stdout(false);
    result = exception_try(raise_abort, 0, test_local_exception_handler, STRING_CONST("raise_abort"));
    log_enable_stdout(true);
    EXPECT_EQ(result, FOUNDATION_EXCEPTION_CAUGHT);
    EXPECT_TRUE(_exception_handler_called);

    return 0;
}