diff options
author | Jeff Peeler <jpeeler@digium.com> | 2010-11-08 22:03:54 +0000 |
---|---|---|
committer | Jeff Peeler <jpeeler@digium.com> | 2010-11-08 22:03:54 +0000 |
commit | 12a40275f2ca61d45114aa8d6c75506a6401a17b (patch) | |
tree | 6d0cedd1c430fd4314072c6d3145557fb0903e3d /main | |
parent | 2df9e23e35dbbb61c37165eee4e1f1e5e474f8c4 (diff) |
Merged revisions 294278 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
................
r294278 | jpeeler | 2010-11-08 15:59:45 -0600 (Mon, 08 Nov 2010) | 23 lines
Merged revisions 294277 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2
........
r294277 | jpeeler | 2010-11-08 15:58:13 -0600 (Mon, 08 Nov 2010) | 16 lines
Fix playback failure when using IAX with the timerfd module.
To fix this issue the alert pipe will now be used when the timerfd module is
in use. There appeared to be a race that was not solved by adding locking in the
timerfd module, but needed to be there anyway. The race was between the timer
being put in non-continuous mode in ast_read on the channel thread and the IAX
frame scheduler queuing a frame which would enable continuous mode before the
non-continuous mode event was read. This race for now is simply avoided.
(closes issue #18110)
Reported by: tpanton
Tested by: tpanton
I put tested by tpanton because it was tested on his hardware. Thanks for the
remote access to debug this issue!
........
................
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@294279 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 4 | ||||
-rw-r--r-- | main/timing.c | 5 |
2 files changed, 8 insertions, 1 deletions
diff --git a/main/channel.c b/main/channel.c index daf5b7a8e..7c1e998af 100644 --- a/main/channel.c +++ b/main/channel.c @@ -1129,7 +1129,9 @@ __ast_channel_alloc_ap(int needqueue, int state, const char *cid_num, const char } if ((tmp->timer = ast_timer_open())) { - needqueue = 0; + if (strcmp(ast_timer_get_name(tmp->timer), "timerfd")) { + needqueue = 0; + } tmp->timingfd = ast_timer_fd(tmp->timer); } diff --git a/main/timing.c b/main/timing.c index d15024b32..23d3cf8ee 100644 --- a/main/timing.c +++ b/main/timing.c @@ -205,6 +205,11 @@ unsigned int ast_timer_get_max_rate(const struct ast_timer *handle) return res; } +const char *ast_timer_get_name(const struct ast_timer *handle) +{ + return handle->holder->iface->name; +} + static char *timing_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { struct ast_timer *timer; |