Loading innobase/include/srv0start.h +3 −1 Original line number Diff line number Diff line Loading @@ -63,11 +63,13 @@ innobase_start_or_create_for_mysql(void); /* out: DB_SUCCESS or error code */ /******************************************************************** Shuts down the Innobase database. */ int innobase_shutdown_for_mysql(void); /*=============================*/ /* out: DB_SUCCESS or error code */ #ifdef __NETWARE__ void set_panic_flag_for_netware(void); #endif extern ulint srv_sizeof_trx_t_in_ha_innodb_cc; Loading innobase/include/ut0dbg.h +33 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,38 @@ extern ulint* ut_dbg_null_ptr; extern const char* ut_dbg_msg_assert_fail; extern const char* ut_dbg_msg_trap; extern const char* ut_dbg_msg_stop; /* Have a graceful exit on NetWare rather than a segfault to avoid abends */ #ifdef __NETWARE__ extern ibool panic_shutdown; #define ut_a(EXPR) do {\ if (!((ulint)(EXPR) + ut_dbg_zero)) {\ ut_print_timestamp(stderr);\ fprintf(stderr, ut_dbg_msg_assert_fail,\ os_thread_pf(os_thread_get_curr_id()), __FILE__,\ (ulint)__LINE__);\ fputs("InnoDB: Failing assertion: " #EXPR "\n", stderr);\ fputs(ut_dbg_msg_trap, stderr);\ ut_dbg_stop_threads = TRUE;\ if (ut_dbg_stop_threads) {\ fprintf(stderr, ut_dbg_msg_stop,\ os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\ }\ if(!panic_shutdown){\ panic_shutdown = TRUE;\ innobase_shutdown_for_mysql();}\ exit(1);\ }\ } while (0) #define ut_error do {\ ut_print_timestamp(stderr);\ fprintf(stderr, ut_dbg_msg_assert_fail,\ os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\ fprintf(stderr, ut_dbg_msg_trap);\ ut_dbg_stop_threads = TRUE;\ if(!panic_shutdown){panic_shutdown = TRUE;\ innobase_shutdown_for_mysql();}\ } while (0) #else #define ut_a(EXPR) do {\ if (!((ulint)(EXPR) + ut_dbg_zero)) {\ ut_print_timestamp(stderr);\ Loading @@ -49,6 +80,7 @@ extern const char* ut_dbg_msg_stop; ut_dbg_stop_threads = TRUE;\ if (*(ut_dbg_null_ptr)) ut_dbg_null_ptr = NULL;\ } while (0) #endif #ifdef UNIV_DEBUG # define ut_ad(EXPR) ut_a(EXPR) Loading innobase/srv/srv0start.c +18 −6 Original line number Diff line number Diff line Loading @@ -1079,6 +1079,7 @@ NetWare. */ for (i = 0; i < srv_n_file_io_threads; i++) { n[i] = i; os_thread_create(io_handler_thread, n + i, thread_ids + i); } Loading Loading @@ -1440,7 +1441,6 @@ NetWare. */ } fflush(stderr); return((int) DB_SUCCESS); } Loading @@ -1453,7 +1453,9 @@ innobase_shutdown_for_mysql(void) /* out: DB_SUCCESS or error code */ { ulint i; #ifdef __NETWARE__ extern ibool panic_shutdown; #endif if (!srv_was_started) { if (srv_is_being_started) { ut_print_timestamp(stderr); Loading @@ -1471,6 +1473,9 @@ innobase_shutdown_for_mysql(void) The step 1 is the real InnoDB shutdown. The remaining steps just free data structures after the shutdown. */ #ifdef __NETWARE__ if(!panic_shutdown) #endif logs_empty_and_mark_files_at_shutdown(); if (srv_conc_n_threads != 0) { Loading Loading @@ -1545,7 +1550,6 @@ innobase_shutdown_for_mysql(void) /* 3. Free all InnoDB's own mutexes and the os_fast_mutexes inside them */ sync_close(); /* 4. Free the os_conc_mutex and all os_events and os_mutexes */ Loading Loading @@ -1583,3 +1587,11 @@ innobase_shutdown_for_mysql(void) return((int) DB_SUCCESS); } #ifdef __NETWARE__ void set_panic_flag_for_netware() { extern ibool panic_shutdown; panic_shutdown = TRUE; } #endif innobase/ut/ut0dbg.c +6 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,12 @@ ulint ut_dbg_zero = 0; /* If this is set to TRUE all threads will stop into the next assertion and assert */ ibool ut_dbg_stop_threads = FALSE; #ifdef __NETWARE__ ibool panic_shutdown = FALSE; /* This is set to TRUE when on NetWare there happens an InnoDB assertion failure or other fatal error condition that requires an immediate shutdown. */ #endif /* Null pointer used to generate memory trap */ ulint* ut_dbg_null_ptr = NULL; Loading innobase/ut/ut0mem.c +6 −0 Original line number Diff line number Diff line Loading @@ -106,7 +106,13 @@ ut_malloc_low( /* Make an intentional seg fault so that we get a stack trace */ /* Intentional segfault on NetWare causes an abend. Avoid this by graceful exit handling in ut_a(). */ #if (!defined __NETWARE__) if (*ut_mem_null_ptr) ut_mem_null_ptr = 0; #else ut_a(0); #endif } if (set_to_zero) { Loading Loading
innobase/include/srv0start.h +3 −1 Original line number Diff line number Diff line Loading @@ -63,11 +63,13 @@ innobase_start_or_create_for_mysql(void); /* out: DB_SUCCESS or error code */ /******************************************************************** Shuts down the Innobase database. */ int innobase_shutdown_for_mysql(void); /*=============================*/ /* out: DB_SUCCESS or error code */ #ifdef __NETWARE__ void set_panic_flag_for_netware(void); #endif extern ulint srv_sizeof_trx_t_in_ha_innodb_cc; Loading
innobase/include/ut0dbg.h +33 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,38 @@ extern ulint* ut_dbg_null_ptr; extern const char* ut_dbg_msg_assert_fail; extern const char* ut_dbg_msg_trap; extern const char* ut_dbg_msg_stop; /* Have a graceful exit on NetWare rather than a segfault to avoid abends */ #ifdef __NETWARE__ extern ibool panic_shutdown; #define ut_a(EXPR) do {\ if (!((ulint)(EXPR) + ut_dbg_zero)) {\ ut_print_timestamp(stderr);\ fprintf(stderr, ut_dbg_msg_assert_fail,\ os_thread_pf(os_thread_get_curr_id()), __FILE__,\ (ulint)__LINE__);\ fputs("InnoDB: Failing assertion: " #EXPR "\n", stderr);\ fputs(ut_dbg_msg_trap, stderr);\ ut_dbg_stop_threads = TRUE;\ if (ut_dbg_stop_threads) {\ fprintf(stderr, ut_dbg_msg_stop,\ os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\ }\ if(!panic_shutdown){\ panic_shutdown = TRUE;\ innobase_shutdown_for_mysql();}\ exit(1);\ }\ } while (0) #define ut_error do {\ ut_print_timestamp(stderr);\ fprintf(stderr, ut_dbg_msg_assert_fail,\ os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\ fprintf(stderr, ut_dbg_msg_trap);\ ut_dbg_stop_threads = TRUE;\ if(!panic_shutdown){panic_shutdown = TRUE;\ innobase_shutdown_for_mysql();}\ } while (0) #else #define ut_a(EXPR) do {\ if (!((ulint)(EXPR) + ut_dbg_zero)) {\ ut_print_timestamp(stderr);\ Loading @@ -49,6 +80,7 @@ extern const char* ut_dbg_msg_stop; ut_dbg_stop_threads = TRUE;\ if (*(ut_dbg_null_ptr)) ut_dbg_null_ptr = NULL;\ } while (0) #endif #ifdef UNIV_DEBUG # define ut_ad(EXPR) ut_a(EXPR) Loading
innobase/srv/srv0start.c +18 −6 Original line number Diff line number Diff line Loading @@ -1079,6 +1079,7 @@ NetWare. */ for (i = 0; i < srv_n_file_io_threads; i++) { n[i] = i; os_thread_create(io_handler_thread, n + i, thread_ids + i); } Loading Loading @@ -1440,7 +1441,6 @@ NetWare. */ } fflush(stderr); return((int) DB_SUCCESS); } Loading @@ -1453,7 +1453,9 @@ innobase_shutdown_for_mysql(void) /* out: DB_SUCCESS or error code */ { ulint i; #ifdef __NETWARE__ extern ibool panic_shutdown; #endif if (!srv_was_started) { if (srv_is_being_started) { ut_print_timestamp(stderr); Loading @@ -1471,6 +1473,9 @@ innobase_shutdown_for_mysql(void) The step 1 is the real InnoDB shutdown. The remaining steps just free data structures after the shutdown. */ #ifdef __NETWARE__ if(!panic_shutdown) #endif logs_empty_and_mark_files_at_shutdown(); if (srv_conc_n_threads != 0) { Loading Loading @@ -1545,7 +1550,6 @@ innobase_shutdown_for_mysql(void) /* 3. Free all InnoDB's own mutexes and the os_fast_mutexes inside them */ sync_close(); /* 4. Free the os_conc_mutex and all os_events and os_mutexes */ Loading Loading @@ -1583,3 +1587,11 @@ innobase_shutdown_for_mysql(void) return((int) DB_SUCCESS); } #ifdef __NETWARE__ void set_panic_flag_for_netware() { extern ibool panic_shutdown; panic_shutdown = TRUE; } #endif
innobase/ut/ut0dbg.c +6 −1 Original line number Diff line number Diff line Loading @@ -14,7 +14,12 @@ ulint ut_dbg_zero = 0; /* If this is set to TRUE all threads will stop into the next assertion and assert */ ibool ut_dbg_stop_threads = FALSE; #ifdef __NETWARE__ ibool panic_shutdown = FALSE; /* This is set to TRUE when on NetWare there happens an InnoDB assertion failure or other fatal error condition that requires an immediate shutdown. */ #endif /* Null pointer used to generate memory trap */ ulint* ut_dbg_null_ptr = NULL; Loading
innobase/ut/ut0mem.c +6 −0 Original line number Diff line number Diff line Loading @@ -106,7 +106,13 @@ ut_malloc_low( /* Make an intentional seg fault so that we get a stack trace */ /* Intentional segfault on NetWare causes an abend. Avoid this by graceful exit handling in ut_a(). */ #if (!defined __NETWARE__) if (*ut_mem_null_ptr) ut_mem_null_ptr = 0; #else ut_a(0); #endif } if (set_to_zero) { Loading