]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-4379 gsmopen: 'gsm remove interface' works now
authorGiovanni Maruzzelli <gmaruzz@gmail.com>
Thu, 2 Aug 2012 16:39:02 +0000 (18:39 +0200)
committerGiovanni Maruzzelli <gmaruzz@gmail.com>
Thu, 2 Aug 2012 16:39:02 +0000 (18:39 +0200)
src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp

index 837d20ed3003ebf3e0be468212d3701cb9a80dee..05221d180064616e032ed74599fdbec09db9890a 100644 (file)
@@ -342,6 +342,7 @@ static switch_status_t interface_exists(char *the_interface)
 static switch_status_t remove_interface(char *the_interface)
 {
        int x = 10;
+       int fd;
 #ifdef WIN32
        switch_size_t howmany = 8;
 #else
@@ -390,6 +391,8 @@ static switch_status_t remove_interface(char *the_interface)
                goto end;
        }
 
+        LOKKA(tech_pvt->controldev_lock);
+
        globals.GSMOPEN_INTERFACES[interface_id].running = 0;
 
        if (globals.GSMOPEN_INTERFACES[interface_id].gsmopen_signaling_thread) {
@@ -441,6 +444,42 @@ static switch_status_t remove_interface(char *the_interface)
                switch_thread_join(&status, globals.GSMOPEN_INTERFACES[interface_id].gsmopen_api_thread);
        }
 
+
+
+                       fd = tech_pvt->controldevfd;
+                       //DEBUGA_GSMOPEN("SHUTDOWN tech_pvt->controldevfd=%d\n", GSMOPEN_P_LOG, tech_pvt->controldevfd);
+                       if (fd) {
+                               //close(fd);
+                               tech_pvt->controldevfd = -1;
+                               DEBUGA_GSMOPEN("SHUTDOWN tech_pvt->controldevfd=%d\n", GSMOPEN_P_LOG, tech_pvt->controldevfd);
+                       }
+
+                       serial_audio_shutdown(tech_pvt);
+
+                       int res;
+                       res = tech_pvt->serialPort_serial_control->Close();
+                       DEBUGA_GSMOPEN("serial_shutdown res=%d (controldevfd is %d)\n", GSMOPEN_P_LOG, res, tech_pvt->controldevfd);
+
+#ifndef WIN32
+                       shutdown(tech_pvt->audiogsmopenpipe[0], 2);
+                       close(tech_pvt->audiogsmopenpipe[0]);
+                       shutdown(tech_pvt->audiogsmopenpipe[1], 2);
+                       close(tech_pvt->audiogsmopenpipe[1]);
+                       shutdown(tech_pvt->audiopipe[0], 2);
+                       close(tech_pvt->audiopipe[0]);
+                       shutdown(tech_pvt->audiopipe[1], 2);
+                       close(tech_pvt->audiopipe[1]);
+                       shutdown(tech_pvt->GSMopenHandles.fdesc[0], 2);
+                       close(tech_pvt->GSMopenHandles.fdesc[0]);
+                       shutdown(tech_pvt->GSMopenHandles.fdesc[1], 2);
+                       close(tech_pvt->GSMopenHandles.fdesc[1]);
+#endif /* WIN32 */
+
+
+
+
+
+        UNLOCKA(tech_pvt->controldev_lock);
        switch_mutex_lock(globals.mutex);
        if (globals.gsm_console == &globals.GSMOPEN_INTERFACES[interface_id]) {
                DEBUGA_GSMOPEN("interface '%s' no more console\n", GSMOPEN_P_LOG, the_interface);
@@ -454,6 +493,7 @@ static switch_status_t remove_interface(char *the_interface)
 
        DEBUGA_GSMOPEN("interface '%s' deleted successfully\n", GSMOPEN_P_LOG, the_interface);
        globals.GSMOPEN_INTERFACES[interface_id].running = 1;
+
   end:
        //running = 1;
        return SWITCH_STATUS_SUCCESS;