aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-02 20:07:59 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-02 20:07:59 +0000
commit6479cf7a192c80019bb2c76094c63e4f694dfb36 (patch)
tree8c2bc9c5125568761148a5322fd6945fd47a316c
parentbaf81a207b33fb2e159a9e30edb88aa0c859e502 (diff)
Change the fd on the I/O context in case it changed during the reload, which is indeed possible. (issue #7943 reported by eclubb)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@44213 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_sip.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 656034cd9..b5ce792c6 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -438,6 +438,7 @@ static int expiry = DEFAULT_EXPIRY;
static struct sched_context *sched;
static struct io_context *io;
+static int *sipsock_read_id;
#define SIP_MAX_HEADERS 64 /*!< Max amount of SIP headers to read */
#define SIP_MAX_LINES 64 /*!< Max amount of lines in SIP attachment (like SDP) */
@@ -11441,7 +11442,7 @@ static void *do_monitor(void *data)
/* Add an I/O event to our UDP socket */
if (sipsock > -1)
- ast_io_add(io, sipsock, sipsock_read, AST_IO_IN, NULL);
+ sipsock_read_id = ast_io_add(io, sipsock, sipsock_read, AST_IO_IN, NULL);
/* This thread monitors all the frame relay interfaces which are not yet in use
(and thus do not have a separate thread) indefinitely */
@@ -11456,6 +11457,10 @@ static void *do_monitor(void *data)
if (option_verbose > 0)
ast_verbose(VERBOSE_PREFIX_1 "Reloading SIP\n");
sip_do_reload();
+
+ /* Change the I/O fd of our UDP socket */
+ if (sipsock > -1)
+ sipsock_read_id = ast_io_change(io, sipsock_read_id, sipsock, NULL, 0, NULL);
}
/* Check for interfaces needing to be killed */
ast_mutex_lock(&iflock);