[Freeswitch-svn] [commit] r10695 - freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax

FreeSWITCH SVN gmaruzz at freeswitch.org
Wed Dec 10 07:52:02 PST 2008


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();



More information about the Freeswitch-svn mailing list