FS-4379 gsmopen: 'gsm remove interface' works now

This commit is contained in:
Giovanni Maruzzelli 2012-08-02 18:39:02 +02:00
parent e97da8e20a
commit c5d72d9bd0
1 changed files with 40 additions and 0 deletions

View File

@ -342,6 +342,7 @@ static switch_status_t interface_exists(char *the_interface)
static switch_status_t remove_interface(char *the_interface) static switch_status_t remove_interface(char *the_interface)
{ {
int x = 10; int x = 10;
int fd;
#ifdef WIN32 #ifdef WIN32
switch_size_t howmany = 8; switch_size_t howmany = 8;
#else #else
@ -390,6 +391,8 @@ static switch_status_t remove_interface(char *the_interface)
goto end; goto end;
} }
LOKKA(tech_pvt->controldev_lock);
globals.GSMOPEN_INTERFACES[interface_id].running = 0; globals.GSMOPEN_INTERFACES[interface_id].running = 0;
if (globals.GSMOPEN_INTERFACES[interface_id].gsmopen_signaling_thread) { 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); 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); switch_mutex_lock(globals.mutex);
if (globals.gsm_console == &globals.GSMOPEN_INTERFACES[interface_id]) { if (globals.gsm_console == &globals.GSMOPEN_INTERFACES[interface_id]) {
DEBUGA_GSMOPEN("interface '%s' no more console\n", GSMOPEN_P_LOG, the_interface); 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); DEBUGA_GSMOPEN("interface '%s' deleted successfully\n", GSMOPEN_P_LOG, the_interface);
globals.GSMOPEN_INTERFACES[interface_id].running = 1; globals.GSMOPEN_INTERFACES[interface_id].running = 1;
end: end:
//running = 1; //running = 1;
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;