From: Russell Bryant Date: Tue, 26 Aug 2008 16:07:58 +0000 (+0000) Subject: Fix some bogus scheduler usage in chan_sip. This code used the return value X-Git-Tag: 1.4.22-rc3~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=91cec13c3d90ed55d15c10a9ca7216ee93592c02;p=thirdparty%2Fasterisk.git Fix some bogus scheduler usage in chan_sip. This code used the return value of a completely unrelated function to determine whether the scheduler should be run or not. This would have caused the scheduler to not run in cases where it should have. Also, leave a note about another scheduler issue that needs to be addressed at some point. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@140060 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index b4e83d4403..5014f99357 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -16101,6 +16101,12 @@ restartsearch: } ast_mutex_unlock(&iflock); + /* XXX TODO The scheduler usage in this module does not have sufficient + * synchronization being done between running the scheduler and places + * scheduling tasks. As it is written, any scheduled item may not run + * any sooner than about 1 second, regardless of whether a sooner time + * was asked for. */ + pthread_testcancel(); /* Wait for sched or io */ res = ast_sched_wait(sched); @@ -16113,11 +16119,9 @@ restartsearch: if (option_debug && res > 20) ast_log(LOG_DEBUG, "chan_sip: ast_io_wait ran %d all at once\n", res); ast_mutex_lock(&monlock); - if (res >= 0) { - res = ast_sched_runq(sched); - if (option_debug && res >= 20) - ast_log(LOG_DEBUG, "chan_sip: ast_sched_runq ran %d all at once\n", res); - } + res = ast_sched_runq(sched); + if (option_debug && res >= 20) + ast_log(LOG_DEBUG, "chan_sip: ast_sched_runq ran %d all at once\n", res); /* Send MWI notifications to peers - static and cached realtime peers */ t = time(NULL);