Author: mikej Date: Thu Mar 29 22:20:13 2007 New Revision: 4803 Modified: freeswitch/trunk/src/include/private/switch_core.h freeswitch/trunk/src/switch_core.c freeswitch/trunk/src/switch_core_memory.c freeswitch/trunk/src/switch_core_session.c freeswitch/trunk/src/switch_core_sqldb.c freeswitch/trunk/src/switch_core_state_machine.c Log: don't export our private functions. fix crash protection build. Modified: freeswitch/trunk/src/include/private/switch_core.h ============================================================================== --- freeswitch/trunk/src/include/private/switch_core.h (original) +++ freeswitch/trunk/src/include/private/switch_core.h Thu Mar 29 22:20:13 2007 @@ -143,7 +143,8 @@ struct switch_media_bug *next; }; -SWITCH_DECLARE(void) switch_core_sqldb_start(switch_memory_pool_t *pool); -SWITCH_DECLARE(void) switch_core_sqldb_stop(void); -SWITCH_DECLARE(void) switch_core_session_init(switch_memory_pool_t *pool); -SWITCH_DECLARE(switch_memory_pool_t *) switch_core_memory_init(void); +void switch_core_sqldb_start(switch_memory_pool_t *pool); +void switch_core_sqldb_stop(void); +void switch_core_session_init(switch_memory_pool_t *pool); +void switch_core_state_machine_init(switch_memory_pool_t *pool); +switch_memory_pool_t *switch_core_memory_init(void); Modified: freeswitch/trunk/src/switch_core.c ============================================================================== --- freeswitch/trunk/src/switch_core.c (original) +++ freeswitch/trunk/src/switch_core.c Thu Mar 29 22:20:13 2007 @@ -43,9 +43,6 @@ switch_time_t initiated; switch_hash_t *global_vars; switch_memory_pool_t *memory_pool; -#ifdef CRASH_PROT - switch_hash_t *stack_table; -#endif const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS]; int state_handler_index; FILE *console; @@ -426,8 +423,11 @@ switch_core_set_globals(); switch_core_session_init(runtime.memory_pool); + switch_core_state_machine_init(runtime.memory_pool); switch_core_hash_init(&runtime.global_vars, runtime.memory_pool); + + if (switch_xml_init(runtime.memory_pool, err) != SWITCH_STATUS_SUCCESS) { apr_terminate(); return SWITCH_STATUS_MEMERR; @@ -486,12 +486,6 @@ switch_rtp_init(runtime.memory_pool); runtime.running = 1; - -#ifdef CRASH_PROT - switch_core_hash_init(&runtime.stack_table, runtime.memory_pool); -#endif - - switch_scheduler_task_thread_start(); runtime.initiated = switch_time_now(); @@ -673,8 +667,6 @@ runtime.console = NULL; } - switch_yield(1000000); - switch_safe_free(SWITCH_GLOBAL_dirs.base_dir); switch_safe_free(SWITCH_GLOBAL_dirs.mod_dir); switch_safe_free(SWITCH_GLOBAL_dirs.conf_dir); Modified: freeswitch/trunk/src/switch_core_memory.c ============================================================================== --- freeswitch/trunk/src/switch_core_memory.c (original) +++ freeswitch/trunk/src/switch_core_memory.c Thu Mar 29 22:20:13 2007 @@ -212,7 +212,7 @@ return ptr; } -SWITCH_DECLARE(switch_memory_pool_t *) switch_core_memory_init(void) +switch_memory_pool_t *switch_core_memory_init(void) { memset(&runtime, 0, sizeof(runtime)); Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Thu Mar 29 22:20:13 2007 @@ -638,56 +638,6 @@ return session->thread_running; } -#ifdef CRASH_PROT -#if defined (__GNUC__) && defined (LINUX) -#include <execinfo.h> -#include <stdio.h> -#include <stdlib.h> -#define STACK_LEN 10 - -/* Obtain a backtrace and print it to stdout. */ -static void print_trace(void) -{ - void *array[STACK_LEN]; - size_t size; - char **strings; - size_t i; - - size = backtrace(array, STACK_LEN); - strings = backtrace_symbols(array, size); - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Obtained %zd stack frames.\n", size); - - for (i = 0; i < size; i++) { - switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CRIT, "%s\n", strings[i]); - } - - free(strings); -} -#else -static void print_trace(void) -{ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Trace not avaliable =(\n"); -} -#endif - - -static void handle_fatality(int sig) -{ - switch_thread_id_t thread_id; - jmp_buf *env; - - if (sig && (thread_id = switch_thread_self()) - && (env = (jmp_buf *) apr_hash_get(runtime.stack_table, &thread_id, sizeof(thread_id)))) { - print_trace(); - longjmp(*env, sig); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Caught signal %d for unmapped thread!", sig); - abort(); - } -} -#endif - SWITCH_DECLARE(void) switch_core_session_destroy(switch_core_session_t **session) { @@ -900,7 +850,7 @@ } -SWITCH_DECLARE(void) switch_core_session_init(switch_memory_pool_t *pool) +void switch_core_session_init(switch_memory_pool_t *pool) { memset(&runtime, 0, sizeof(runtime)); runtime.session_limit = 1000; Modified: freeswitch/trunk/src/switch_core_sqldb.c ============================================================================== --- freeswitch/trunk/src/switch_core_sqldb.c (original) +++ freeswitch/trunk/src/switch_core_sqldb.c Thu Mar 29 22:20:13 2007 @@ -340,7 +340,7 @@ } -SWITCH_DECLARE(void) switch_core_sqldb_start(switch_memory_pool_t *pool) +void switch_core_sqldb_start(switch_memory_pool_t *pool) { switch_thread_t *thread; switch_threadattr_t *thd_attr;; @@ -405,7 +405,7 @@ } -SWITCH_DECLARE(void) switch_core_sqldb_stop(void) +void switch_core_sqldb_stop(void) { switch_queue_push(runtime.sql_queue, NULL); Modified: freeswitch/trunk/src/switch_core_state_machine.c ============================================================================== --- freeswitch/trunk/src/switch_core_state_machine.c (original) +++ freeswitch/trunk/src/switch_core_state_machine.c Thu Mar 29 22:20:13 2007 @@ -213,6 +213,66 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard HIBERNATE\n"); } + +#ifdef CRASH_PROT +static switch_hash_t *stack_table; +#if defined (__GNUC__) && defined (LINUX) +#include <execinfo.h> +#include <stdio.h> +#include <stdlib.h> +#define STACK_LEN 10 + +/* Obtain a backtrace and print it to stdout. */ +static void print_trace(void) +{ + void *array[STACK_LEN]; + size_t size; + char **strings; + size_t i; + + size = backtrace(array, STACK_LEN); + strings = backtrace_symbols(array, size); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Obtained %zd stack frames.\n", size); + + for (i = 0; i < size; i++) { + switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CRIT, "%s\n", strings[i]); + } + + free(strings); +} +#else +static void print_trace(void) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Trace not avaliable =(\n"); +} +#endif + + +static void handle_fatality(int sig) +{ + switch_thread_id_t thread_id; + jmp_buf *env; + + if (sig && (thread_id = switch_thread_self()) + && (env = (jmp_buf *) apr_hash_get(stack_table, &thread_id, sizeof(thread_id)))) { + print_trace(); + longjmp(*env, sig); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Caught signal %d for unmapped thread!", sig); + abort(); + } +} +#endif + +void switch_core_state_machine_init(switch_memory_pool_t *pool) +{ + (void)0; +#ifdef CRASH_PROT + switch_core_hash_init(&stack_table, pool); +#endif +} + SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session) { switch_channel_state_t state = CS_NEW, laststate = CS_HANGUP, midstate = CS_DONE, endstate; @@ -241,7 +301,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Thread has crashed for channel %s\n", switch_channel_get_name(session->channel)); switch_channel_hangup(session->channel, SWITCH_CAUSE_CRASH); } else { - apr_hash_set(runtime.stack_table, &thread_id, sizeof(thread_id), &env); + apr_hash_set(stack_table, &thread_id, sizeof(thread_id), &env); } #endif /* @@ -596,7 +656,7 @@ switch_mutex_unlock(session->mutex); #ifdef CRASH_PROT - apr_hash_set(runtime.stack_table, &thread_id, sizeof(thread_id), NULL); + apr_hash_set(stack_table, &thread_id, sizeof(thread_id), NULL); #endif session->thread_running = 0;