summaryrefslogtreecommitdiff
path: root/funcs/func_aes.c
diff options
context:
space:
mode:
authorJeff Peeler <jpeeler@digium.com>2011-01-14 17:34:28 +0000
committerJeff Peeler <jpeeler@digium.com>2011-01-14 17:34:28 +0000
commita0e4c4ee5ba8a65137c05c0239d04b0de0f6e4d3 (patch)
treead863b1dc956a45b14a0bd46d969f46a0ba380be /funcs/func_aes.c
parent89fe21382abf0c3e6a878ad667089e11d9df454e (diff)
Merged revisions 301790 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r301790 | jpeeler | 2011-01-14 11:32:52 -0600 (Fri, 14 Jan 2011) | 42 lines Resolve deadlock involving REFER. Two fixes: 1) One must always have the private unlocked before calling pbx_builtin_setvar_helper to not invalidate locking order since it locks the channel. 2) Unlock the channel before calling pbx_find_extension, which starts and stops autoservice during the lookup. The problem scenario as illustrated by the reporter: Thread: do_monitor ----------------------- handle_request_do handle_incoming handle_request_refer ast_parking_ext_valid pbx_find_extension ast_autoservice_stop while (chan_list_state == as_chan_list_state) { usleep(1000); } Thread: autoservice_run ----------------------- autoservice_run chan = ast_waitfor_n ast_waitfor_nandfds ast_waitfor_nandfds_classic / simple / complex (depending on your system) ast_channel_lock(c[x]); handle_request_do and schedule_process_request_queue locks the owner if it exists. The autoservice thread is waiting for the channel lock, which wasn't ever released since the do_monitor thread was waiting for autoservice operations to complete. Solved by unlocking the channel but keeping a reference to guarantee safety. (closes issue #18403) Reported by: jthurman Patches: 20110103-blind_deadlock.diff uploaded by jthurman (license 614) issue18403.patch uploaded by jpeeler (license 325) Tested by: jthurman ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@301791 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'funcs/func_aes.c')
0 files changed, 0 insertions, 0 deletions