summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 46d670ca6..21ce89647 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -560,6 +560,7 @@ static enum channelreloadreason sip_reloadreason; /*!< Reason for last rel
static struct sched_context *sched; /*!< The scheduling context */
static struct io_context *io; /*!< The IO context */
+static int *sipsock_read_id; /*!< ID of IO entry for sipsock FD */
#define DEC_CALL_LIMIT 0
#define INC_CALL_LIMIT 1
@@ -14430,7 +14431,7 @@ static void *do_monitor(void *data)
/* Add an I/O event to our SIP 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);
/* From here on out, we die whenever asked */
for(;;) {
@@ -14443,6 +14444,10 @@ static void *do_monitor(void *data)
if (option_verbose > 0)
ast_verbose(VERBOSE_PREFIX_1 "Reloading SIP\n");
sip_do_reload(sip_reloadreason);
+
+ /* 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);