[Freeswitch-branches] [commit] r10695 - freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax
Author: gmaruzz Date: Wed Dec 10 10:52:01 2008 New Revision: 10695 Log: skypiax: unload without crashes on windows, yay Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c Wed Dec 10 10:52:01 2008 @@ -34,7 +34,10 @@ switch_core_session_t *global_session = NULL; #ifdef WIN32 HANDLE win32_hGlobal_ThreadShutdownEvent; +switch_thread_t *do_skype_thread_thread; +HWND win32_hInit_MainWindowHandle; #endif /* WIN32 */ +switch_thread_t *skypiax_do_controldev_thread_thread; /*************************************************/ /*************************************************/ /*************************************************/ @@ -744,9 +747,7 @@ } if (interface_id && interface_id < SKYPIAX_MAX_INTERFACES) { struct skypiax_interface newconf; - switch_thread_t *do_skype_thread_thread; switch_threadattr_t *do_skype_thd_attr = NULL; - switch_thread_t *skypiax_do_controldev_thread_thread; switch_threadattr_t *skypiax_do_controldev_thread_thd_attr = NULL; memset(&newconf, '\0', sizeof(newconf)); @@ -778,7 +779,7 @@ "STARTING interface_id=%d\n", interface_id); switch_threadattr_create(&do_skype_thd_attr, skypiax_module_pool); - switch_threadattr_detach_set(do_skype_thd_attr, 1); + //switch_threadattr_detach_set(do_skype_thd_attr, 1); switch_threadattr_stacksize_set(do_skype_thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&do_skype_thread_thread, do_skype_thd_attr, do_skype_thread, &SKYPIAX_INTERFACES[interface_id], skypiax_module_pool); @@ -787,7 +788,7 @@ switch_threadattr_create(&skypiax_do_controldev_thread_thd_attr, skypiax_module_pool); - switch_threadattr_detach_set(skypiax_do_controldev_thread_thd_attr, 1); + //switch_threadattr_detach_set(skypiax_do_controldev_thread_thd_attr, 1); switch_threadattr_stacksize_set(skypiax_do_controldev_thread_thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&skypiax_do_controldev_thread_thread, @@ -878,20 +879,28 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown) { - int x = 1000; + int x = 100; struct skypiax_interface *p = NULL; + switch_status_t status; + unsigned int howmany=8; + + p = &SKYPIAX_INTERFACES[2]; running = 0; + switch_file_write(p->AsteriskHandlesAst.fdesc[1], "sciutati", &howmany); // let's the controldev_thread die + #ifdef WIN32 - SetEvent(win32_hGlobal_ThreadShutdownEvent); + if (SendMessage (win32_hInit_MainWindowHandle, WM_DESTROY, 0, 0) == FALSE) { // let's the do_skype_thread die + ERRORA("WHY FALSE HERE? %d\n", SKYPIAX_P_LOG, GetLastError()); + } #endif - while (x) { x--; switch_yield(20000); } - NOTICA("EXITING FUNC!\n", SKYPIAX_P_LOG); + switch_thread_join(&status, do_skype_thread_thread); + switch_thread_join(&status, skypiax_do_controldev_thread_thread); return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c Wed Dec 10 10:52:01 2008 @@ -7,7 +7,7 @@ extern int running; extern skypiax_interface_t SKYPIAX_INTERFACES; #ifdef WIN32 -extern HANDLE win32_hGlobal_ThreadShutdownEvent; +extern HWND win32_hInit_MainWindowHandle; #endif /* WIN32 */ #define SKYPE_AUDIO @@ -379,7 +379,6 @@ #ifdef WIN32 struct AsteriskHandles *win32_AsteriskHandlesSkype; -HWND win32_hInit_MainWindowHandle; HINSTANCE win32_hInit_ProcessHandle; char win32_acInit_WindowClassName[128]; UINT win32_uiGlobal_MsgID_SkypeControlAPIAttach; @@ -441,6 +440,7 @@ fIssueDefProc = 0; switch (uiMessage) { case WM_DESTROY: + NOTICA("got DESTROY\n", SKYPIAX_P_LOG); win32_hInit_MainWindowHandle = NULL; PostQuitMessage(0); break; @@ -593,9 +593,6 @@ && win32_uiGlobal_MsgID_SkypeControlAPIDiscover != 0) { if (win32_Initialize_CreateWindowClass()) { if (win32_Initialize_CreateMainWindow()) { - //win32_hGlobal_ThreadShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - win32_hGlobal_ThreadShutdownEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if (win32_hGlobal_ThreadShutdownEvent != NULL) { if (SendMessage (HWND_BROADCAST, win32_uiGlobal_MsgID_SkypeControlAPIDiscover, (WPARAM) win32_hInit_MainWindowHandle, 0) != 0) { @@ -603,28 +600,15 @@ win32_hInit_MainWindowHandle; while (1) { MSG oMessage; - const HANDLE *MsgWaitHandles[1]; - - MsgWaitHandles[0] = &win32_hGlobal_ThreadShutdownEvent; if(!running) break; - while (MsgWaitResult = MsgWaitForMultipleObjects(1,MsgWaitHandles, FALSE, 300,QS_ALLPOSTMESSAGE)){ - if(!running) - break; - if (MsgWaitResult == WAIT_TIMEOUT) { - continue; - } - - GetMessage(&oMessage, 0, 0, 0); - if(!running) + while( GetMessage(&oMessage, 0, 0, 0) ){ break; TranslateMessage(&oMessage); DispatchMessage(&oMessage); } } } - CloseHandle(win32_hGlobal_ThreadShutdownEvent); - } win32_DeInitialize_DestroyMainWindow(); } win32_DeInitialize_DestroyWindowClass();
participants (1)
-
FreeSWITCH SVN