[commit] r8898 - in freeswitch/trunk/src/mod: applications/mod_conference applications/mod_enum applications/mod_voicemail endpoints/mod_dingaling endpoints/mod_sofia event_handlers/mod_cdr_csv event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_zeroconf languages/mod_lua languages/mod_spidermonkey loggers/mod_logfile
Author: mikej Date: Thu Jul 3 19:54:35 2008 New Revision: 8898 Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c freeswitch/trunk/src/mod/applications/mod_enum/mod_enum.c freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c freeswitch/trunk/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/trunk/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c Log: make modules unbind events and un-reserve subclasses on module unload Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Thu Jul 3 19:54:35 2008 @@ -75,6 +75,7 @@ uint32_t id_pool; int32_t running; uint32_t threads; + switch_event_node_t *node; } globals; typedef enum { @@ -5258,7 +5259,7 @@ switch_mutex_init(&globals.hash_mutex, SWITCH_MUTEX_NESTED, globals.conference_pool); /* Subscribe to presence request events */ - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't subscribe to presence request events!\n"); return SWITCH_STATUS_GENERR; } @@ -5283,6 +5284,9 @@ switch_yield(100000); } + switch_event_unbind(&globals.node); + switch_event_free_subclass(CONF_EVENT_MAINT); + /* free api interface help ".syntax" field string */ switch_safe_free(api_syntax); } Modified: freeswitch/trunk/src/mod/applications/mod_enum/mod_enum.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_enum/mod_enum.c (original) +++ freeswitch/trunk/src/mod/applications/mod_enum/mod_enum.c Thu Jul 3 19:54:35 2008 @@ -80,6 +80,7 @@ switch_memory_pool_t *pool; int auto_reload; int timeout; + switch_event_node_t *node; } globals; SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_root, globals.root); @@ -834,7 +835,7 @@ do_load(); - if (switch_event_bind(modname, SWITCH_EVENT_RELOADXML, NULL, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_RELOADXML, NULL, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_TERM; } @@ -855,6 +856,8 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_enum_shutdown) { + switch_event_unbind(&globals.node); + if (globals.pool) { switch_core_destroy_memory_pool(&globals.pool); } Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original) +++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Thu Jul 3 19:54:35 2008 @@ -2955,5 +2955,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: */ Modified: freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c Thu Jul 3 19:54:35 2008 @@ -103,6 +103,11 @@ int running; int handles; char guess_ip[80]; + switch_event_node_t *in_node; + switch_event_node_t *probe_node; + switch_event_node_t *out_node; + switch_event_node_t *roster_node; + } globals; struct mdl_profile { @@ -1755,22 +1760,22 @@ return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.in_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.probe_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.out_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, roster_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, roster_event_handler, NULL, &globals.roster_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; @@ -1867,6 +1872,16 @@ ldl_global_destroy(); } } + + switch_event_free_subclass(DL_EVENT_LOGIN_SUCCESS); + switch_event_free_subclass(DL_EVENT_LOGIN_FAILURE); + switch_event_free_subclass(DL_EVENT_CONNECTED); + switch_event_unbind(&globals.in_node); + switch_event_unbind(&globals.probe_node); + switch_event_unbind(&globals.out_node); + switch_event_unbind(&globals.roster_node); + + switch_core_hash_destroy(&globals.profile_hash); return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c Thu Jul 3 19:54:35 2008 @@ -1961,36 +1961,36 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for profiles to start\n"); switch_yield(1500000); - if (switch_event_bind(modname, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT, event_handler, NULL, &mod_sofia_globals.custom_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_TERM; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, &mod_sofia_globals.in_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, &mod_sofia_globals.out_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, &mod_sofia_globals.probe_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, &mod_sofia_globals.roster_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_MESSAGE_WAITING, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_mwi_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_MESSAGE_WAITING, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_mwi_event_handler, NULL, &mod_sofia_globals.mwi_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; @@ -2030,6 +2030,13 @@ } switch_mutex_unlock(mod_sofia_globals.mutex); + switch_event_unbind(&mod_sofia_globals.in_node); + switch_event_unbind(&mod_sofia_globals.probe_node); + switch_event_unbind(&mod_sofia_globals.out_node); + switch_event_unbind(&mod_sofia_globals.roster_node); + switch_event_unbind(&mod_sofia_globals.custom_node); + switch_event_unbind(&mod_sofia_globals.mwi_node); + while (mod_sofia_globals.threads) { switch_yield(1000); if (++sanity >= 10000) { Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Thu Jul 3 19:54:35 2008 @@ -209,6 +209,12 @@ switch_queue_t *mwi_queue; struct sofia_private destroy_private; struct sofia_private keep_private; + switch_event_node_t *in_node; + switch_event_node_t *probe_node; + switch_event_node_t *out_node; + switch_event_node_t *roster_node; + switch_event_node_t *custom_node; + switch_event_node_t *mwi_node; }; extern struct mod_sofia_globals mod_sofia_globals; Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Thu Jul 3 19:54:35 2008 @@ -1184,6 +1184,7 @@ char *p; route = switch_core_session_strdup(tech_pvt->session, route + 9); + switch_assert(route); for (p = route; p && *p ; p++) { if (*p == '>' || *p == ';') { Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Thu Jul 3 19:54:35 2008 @@ -1413,7 +1413,7 @@ char *sticky = NULL; if (is_nat) { - const char *ipv6 = strchr(network_ip, ':'); + ipv6 = strchr(network_ip, ':'); sticky = switch_mprintf("sip:%s@%s%s%s:%d", contact_user, ipv6 ? "[" : "", Modified: freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c Thu Jul 3 19:54:35 2008 @@ -56,11 +56,12 @@ int rotate; int debug; cdr_leg_t legs; + switch_event_node_t *node; } globals; SWITCH_MODULE_LOAD_FUNCTION(mod_cdr_csv_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cdr_csv_shutdown); -SWITCH_MODULE_DEFINITION(mod_cdr_csv, mod_cdr_csv_load, NULL, NULL); +SWITCH_MODULE_DEFINITION(mod_cdr_csv, mod_cdr_csv_load, mod_cdr_csv_shutdown, NULL); static off_t fd_size(int fd) { @@ -363,7 +364,7 @@ { switch_status_t status = SWITCH_STATUS_SUCCESS; - if (switch_event_bind(modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } @@ -385,6 +386,7 @@ { globals.shutdown = 1; + switch_event_unbind(&globals.node); return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c Thu Jul 3 19:54:35 2008 @@ -54,6 +54,7 @@ switch_hash_t *event_hash; uint8_t event_list[SWITCH_EVENT_ALL + 1]; int running; + switch_event_node_t *node; } globals; SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_address, globals.address); @@ -261,6 +262,9 @@ globals.udp_socket = NULL; } + switch_event_unbind(&globals.node); + switch_event_free_subclass(MULTICAST_EVENT); + switch_core_hash_destroy(&globals.event_hash); return SWITCH_STATUS_SUCCESS; Modified: freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Thu Jul 3 19:54:35 2008 @@ -106,6 +106,11 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj); static void launch_listener_thread(listener_t *listener); +static struct { + switch_event_node_t *node; +} globals; + + static switch_status_t socket_logger(const switch_log_node_t *node, switch_log_level_t level) { listener_t *l; @@ -326,6 +331,7 @@ break; } } + switch_event_unbind(&globals.node); switch_mutex_lock(listen_list.mutex); for (l = listen_list.listeners; l; l = l->next) { @@ -1357,7 +1363,7 @@ listen_list.ready = 1; - if (switch_event_bind(modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } Modified: freeswitch/trunk/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c ============================================================================== --- freeswitch/trunk/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c (original) +++ freeswitch/trunk/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c Thu Jul 3 19:54:35 2008 @@ -46,6 +46,8 @@ sw_discovery discovery; sw_discovery_publish_id disc_id; switch_mutex_t *zc_lock; + switch_event_node_t *publish_node; + switch_event_node_t *unpublish_node; } globals; @@ -218,12 +220,12 @@ return SWITCH_STATUS_MEMERR; } } else if (!strcasecmp(var, "publish") && !strcasecmp(val, "yes")) { - if (switch_event_bind(modname, SWITCH_EVENT_PUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.publish_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_UNPUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_UNPUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.unpublish_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } @@ -248,6 +250,12 @@ RUNNING = -1; switch_yield(100000); } + + switch_event_unbind(&globals.publish_node); + switch_event_unbind(&globals.unpublish_node); + switch_event_free_subclass(MY_EVENT_PUBLISH); + switch_event_free_subclass(MY_EVENT_UNPUBLISH); + return SWITCH_STATUS_SUCCESS; } @@ -265,10 +273,6 @@ return SWITCH_STATUS_TERM; } - if (load_config() != SWITCH_STATUS_SUCCESS) { - return SWITCH_STATUS_TERM; - } - if (switch_event_reserve_subclass(MY_EVENT_PUBLISH) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n"); return SWITCH_STATUS_GENERR; @@ -279,6 +283,10 @@ return SWITCH_STATUS_GENERR; } + if (load_config() != SWITCH_STATUS_SUCCESS) { + return SWITCH_STATUS_TERM; + } + /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp (original) +++ freeswitch/trunk/src/mod/languages/mod_lua/mod_lua.cpp Thu Jul 3 19:54:35 2008 @@ -38,11 +38,14 @@ #include <lualib.h> #include "mod_lua_extra.h" SWITCH_MODULE_LOAD_FUNCTION(mod_lua_load); -SWITCH_MODULE_DEFINITION(mod_lua, mod_lua_load, NULL, NULL); +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_lua_shutdown); + +SWITCH_MODULE_DEFINITION(mod_lua, mod_lua_load, mod_lua_shutdown, NULL); static struct { switch_memory_pool_t *pool; char *xml_handler; + switch_event_node_t *node; } globals; int luaopen_freeswitch(lua_State * L); @@ -389,7 +392,7 @@ switch_api_interface_t *api_interface; switch_application_interface_t *app_interface; - if (switch_event_bind(modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; @@ -411,6 +414,13 @@ return SWITCH_STATUS_SUCCESS; } +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_lua_shutdown) +{ + switch_event_unbind(&globals.node); + return SWITCH_STATUS_SUCCESS; +} + + SWITCH_END_EXTERN_C /* For Emacs: * Local Variables: Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Thu Jul 3 19:54:35 2008 @@ -95,9 +95,9 @@ FILE *gOutFile; int stackDummy; JSRuntime *rt; + switch_event_node_t *node; } globals; - static JSClass global_class = { "Global", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, @@ -3564,7 +3564,7 @@ return status; } - if (switch_event_bind(modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; @@ -3586,6 +3586,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_spidermonkey_shutdown) { curl_global_cleanup(); + switch_event_unbind(&globals.node); switch_core_hash_destroy(&module_manager.mod_hash); switch_core_hash_destroy(&module_manager.load_hash); return SWITCH_STATUS_SUCCESS; Modified: freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c ============================================================================== --- freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c (original) +++ freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c Thu Jul 3 19:54:35 2008 @@ -46,6 +46,7 @@ static struct { int rotate; switch_mutex_t *mutex; + switch_event_node_t *node; } globals; struct logfile_profile { @@ -341,7 +342,7 @@ } switch_core_hash_init(&profile_hash, module_pool); - if (switch_event_bind(modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } @@ -383,6 +384,8 @@ /* TODO: Need to finish processing pending log messages before we close the file handle */ //switch_file_close(globals->log_afd); + switch_event_unbind(&globals.node); + return SWITCH_STATUS_SUCCESS; }
participants (1)
-
Freeswitch SVN