]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5102 mod_skypopen crashes FS when skype is not working or skype user tries to...
authorGiovanni Maruzzelli <gmaruzz@gmail.com>
Fri, 15 Feb 2013 11:16:06 +0000 (12:16 +0100)
committerGiovanni Maruzzelli <gmaruzz@gmail.com>
Fri, 15 Feb 2013 11:16:49 +0000 (12:16 +0100)
src/mod/endpoints/mod_skypopen/mod_skypopen.c

index 167357f47d39b806ef76e46359f404ef33a5f314..992e77d7206e630e3aa978475ce9e9fce41358ae 100644 (file)
@@ -2029,34 +2029,40 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skypopen_load)
 #endif
 
        running = 1;
-       load_config(FULL_RELOAD);
 
-       *module_interface = switch_loadable_module_create_module_interface(pool, modname);
-       skypopen_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
-       skypopen_endpoint_interface->interface_name = "skypopen";
-       skypopen_endpoint_interface->io_routines = &skypopen_io_routines;
-       skypopen_endpoint_interface->state_handler = &skypopen_state_handlers;
+       if (load_config(FULL_RELOAD) == SWITCH_STATUS_SUCCESS) {
 
-       if (running) {
+               *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+               skypopen_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
+               skypopen_endpoint_interface->interface_name = "skypopen";
+               skypopen_endpoint_interface->io_routines = &skypopen_io_routines;
+               skypopen_endpoint_interface->state_handler = &skypopen_state_handlers;
 
-               SWITCH_ADD_API(commands_api_interface, "sk", "Skypopen console commands", sk_function, SK_SYNTAX);
-               SWITCH_ADD_API(commands_api_interface, "skypopen", "Skypopen interface commands", skypopen_function, SKYPOPEN_SYNTAX);
-               SWITCH_ADD_API(commands_api_interface, "skypopen_chat", "Skypopen_chat interface remote_skypename TEXT", skypopen_chat_function,
-                                          SKYPOPEN_CHAT_SYNTAX);
-               SWITCH_ADD_CHAT(chat_interface, SKYPE_CHAT_PROTO, chat_send);
+               if (running) {
 
-               if (switch_event_reserve_subclass(MY_EVENT_INCOMING_CHATMESSAGE) != SWITCH_STATUS_SUCCESS) {
-                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
-                       return SWITCH_STATUS_FALSE;
-               }
+                       SWITCH_ADD_API(commands_api_interface, "sk", "Skypopen console commands", sk_function, SK_SYNTAX);
+                       SWITCH_ADD_API(commands_api_interface, "skypopen", "Skypopen interface commands", skypopen_function, SKYPOPEN_SYNTAX);
+                       SWITCH_ADD_API(commands_api_interface, "skypopen_chat", "Skypopen_chat interface remote_skypename TEXT", skypopen_chat_function,
+                                       SKYPOPEN_CHAT_SYNTAX);
+                       SWITCH_ADD_CHAT(chat_interface, SKYPE_CHAT_PROTO, chat_send);
 
-               if (switch_event_reserve_subclass(MY_EVENT_INCOMING_RAW) != SWITCH_STATUS_SUCCESS) {
-                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
-                       return SWITCH_STATUS_FALSE;
-               }
+                       if (switch_event_reserve_subclass(MY_EVENT_INCOMING_CHATMESSAGE) != SWITCH_STATUS_SUCCESS) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
+                               return SWITCH_STATUS_FALSE;
+                       }
 
-               /* indicate that the module should continue to be loaded */
-               return SWITCH_STATUS_SUCCESS;
+                       if (switch_event_reserve_subclass(MY_EVENT_INCOMING_RAW) != SWITCH_STATUS_SUCCESS) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n");
+                               return SWITCH_STATUS_FALSE;
+                       }
+
+                       /* indicate that the module should continue to be loaded */
+                       return SWITCH_STATUS_SUCCESS;
+               }
+       } else {
+               running = 0;
+               switch_sleep(1000000); //1 full second
+               return SWITCH_STATUS_FALSE;
        }
        return SWITCH_STATUS_FALSE;
 }