From: Joshua Colp Date: Tue, 16 Sep 2014 21:02:53 +0000 (+0000) Subject: res_rtp_asterisk: Fix 100% CPU usage due to timer heap thread spinning. X-Git-Tag: 12.6.0-rc1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=863538794a8f0710521d5345bba8d0143fd6e6ef;p=thirdparty%2Fasterisk.git res_rtp_asterisk: Fix 100% CPU usage due to timer heap thread spinning. Side note: I need a vacation. ........ Merged revisions 423210 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@423211 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index d67fcd931c..0e99a8a600 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -1029,7 +1029,7 @@ static struct ast_rtp_ioqueue_thread *rtp_ioqueue_thread_get_or_create(void) pj_timer_heap_set_lock(ioqueue->timerheap, lock, PJ_TRUE); - if (pj_ioqueue_create(ioqueue->pool, 16, &ioqueue->ioqueue) != PJ_SUCCESS) { + if (pj_ioqueue_create(ioqueue->pool, PJ_IOQUEUE_MAX_HANDLES, &ioqueue->ioqueue) != PJ_SUCCESS) { goto fatal; } @@ -1697,8 +1697,17 @@ static pj_ice_sess_cb ast_rtp_ice_sess_cb = { /*! \brief Worker thread for timerheap */ static int timer_worker_thread(void *data) { + pj_ioqueue_t *ioqueue; + + if (pj_ioqueue_create(pool, 1, &ioqueue) != PJ_SUCCESS) { + return -1; + } + while (!timer_terminate) { + const pj_time_val delay = {0, 10}; + pj_timer_heap_poll(timer_heap, NULL); + pj_ioqueue_poll(ioqueue, &delay); } return 0;