Author: anthm Date: Thu Oct 2 14:50:09 2008 New Revision: 9796 Modified: freeswitch/trunk/libs/xmlrpc-c/include/xmlrpc-c/abyss.h freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/server.c freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_unix.c freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_win.c freeswitch/trunk/src/mod/formats/mod_shout/Makefile freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c freeswitch/trunk/src/switch.c Log: fix xml_rpc socket shutdown Modified: freeswitch/trunk/libs/xmlrpc-c/include/xmlrpc-c/abyss.h ============================================================================== --- freeswitch/trunk/libs/xmlrpc-c/include/xmlrpc-c/abyss.h (original) +++ freeswitch/trunk/libs/xmlrpc-c/include/xmlrpc-c/abyss.h Thu Oct 2 14:50:09 2008 @@ -191,7 +191,7 @@ ServerSetMimeType(TServer * const serverP, MIMEType * const MIMETypeP); -void +int ServerInit(TServer * const serverP); void Modified: freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/server.c ============================================================================== --- freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/server.c (original) +++ freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/server.c Thu Oct 2 14:50:09 2008 @@ -42,12 +42,12 @@ srvP->terminationRequested = true; - if (srvP->chanSwitchP) + if (srvP->chanSwitchP) { ChanSwitchInterrupt(srvP->chanSwitchP); + ChanSwitchDestroy(srvP->chanSwitchP); + } } - - void ServerResetTerminate(TServer * const serverP) { @@ -651,7 +651,7 @@ -void +int ServerInit(TServer * const serverP) { /*---------------------------------------------------------------------------- Initialize a server to accept connections. @@ -700,9 +700,11 @@ } if (retError) { TraceMsg("ServerInit() failed. %s", retError); - exit(1); + return 0; xmlrpc_strfree(retError); } + + return 1; } Modified: freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_unix.c ============================================================================== --- freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_unix.c (original) +++ freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_unix.c Thu Oct 2 14:50:09 2008 @@ -40,7 +40,7 @@ #include "socket_unix.h" -#define sane_close(_it) if (_it > -1) {close(_it) ; _it = -1; } +#define sane_close(_it) do {if (_it > -1) { close(_it) ; _it = -1; }} while (_it > -1) typedef struct { int interruptorFd; @@ -849,6 +849,7 @@ struct sockaddr_in name; int rc; + int one = 1; name.sin_family = AF_INET; name.sin_port = htons(portNumber); @@ -857,6 +858,7 @@ else name.sin_addr.s_addr = INADDR_ANY; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&one, sizeof(int)); rc = bind(fd, (struct sockaddr *)&name, sizeof(name)); if (rc == -1) Modified: freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_win.c ============================================================================== --- freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_win.c (original) +++ freeswitch/trunk/libs/xmlrpc-c/lib/abyss/src/socket_win.c Thu Oct 2 14:50:09 2008 @@ -838,6 +838,7 @@ struct sockaddr_in name; int rc; + int one = 1; ZeroMemory(&name, sizeof(name)); name.sin_family = AF_INET; @@ -845,6 +846,7 @@ if (addrP) name.sin_addr = *addrP; + setsockopt(winsock, SOL_SOCKET, SO_REUSEADDR, (void *)&one, sizeof(int)); rc = bind(winsock, (struct sockaddr *)&name, sizeof(name)); if (rc != 0) { Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_shout/Makefile (original) +++ freeswitch/trunk/src/mod/formats/mod_shout/Makefile Thu Oct 2 14:50:09 2008 @@ -11,7 +11,7 @@ LAMELA=$(LAME_DIR)/libmp3lame/libmp3lame.la SHOUTLA=$(SHOUT_DIR)/src/libshout.la -MPG123LA=$(MPG123_DIR)/src/libmpg123/.libs/libmpg123.la +MPG123LA=$(MPG123_DIR)/src/libmpg123/libmpg123.la LOCAL_CFLAGS=-I$(SHOUT_DIR)/include -I$(LAME_DIR)/include -I$(MPG123_DIR)/src LOCAL_LIBADD=$(LAMELA) $(SHOUTLA) $(MPG123LA) Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c ============================================================================== --- freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (original) +++ freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Thu Oct 2 14:50:09 2008 @@ -809,21 +809,19 @@ ServerCreate(&globals.abyssServer, "XmlRpcServer", globals.port, SWITCH_GLOBAL_dirs.htdocs_dir, logfile); xmlrpc_server_abyss_set_handler(&env, &globals.abyssServer, "/RPC2", registryP); - ServerInit(&globals.abyssServer); -#if 0 if (ServerInit(&globals.abyssServer) != TRUE) { globals.running = 0; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to start HTTP Port %d\n", globals.port); return SWITCH_STATUS_TERM; } -#endif ServerAddHandler(&globals.abyssServer, handler_hook); ServerAddHandler(&globals.abyssServer, auth_hook); ServerSetKeepaliveTimeout(&globals.abyssServer, 1); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Starting HTTP Port %d, DocRoot [%s]\n", globals.port, SWITCH_GLOBAL_dirs.htdocs_dir); ServerRun(&globals.abyssServer); + switch_yield(1000000); globals.running = 0; return SWITCH_STATUS_TERM; @@ -834,9 +832,10 @@ //globals.abyssServer.running = 0; //shutdown(globals.abyssServer.listensock, 2); ServerTerminate(&globals.abyssServer); - while (globals.running) { + + do { switch_yield(100000); - } + } while (globals.running); return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/trunk/src/switch.c ============================================================================== --- freeswitch/trunk/src/switch.c (original) +++ freeswitch/trunk/src/switch.c Thu Oct 2 14:50:09 2008 @@ -617,6 +617,7 @@ } if (destroy_status == SWITCH_STATUS_RESTART) { + sleep(1); ret = execv(argv[0], argv); }