diff options
author | Alexei Gradinari <alex2grad@gmail.com> | 2016-08-06 11:57:08 -0400 |
---|---|---|
committer | Alexei Gradinari <alex2grad@gmail.com> | 2016-08-10 16:01:23 -0400 |
commit | 1589452fdc044dc6233e73e87c0e3735c97a5495 (patch) | |
tree | a34b5ab3dcda6be5f39b3af193dabc9e24ad0b23 /codecs/ex_ilbc.h | |
parent | 805f105f8898beb0be0cdf5a7df653fdb03f730e (diff) |
pjsip: Fix deadlock with suspend taskprocessor on masquerade
If both channels which should be masqueraded
are in the same serializer:
1st channel will be locked waiting condition 'complete'
2nd channel will be locked waiting condition 'suspended'
On heavy load system a chance that both channels will be in
the same serializer 'pjsip/distibutor' is very high.
To reproduce compile res_pjsip/pjsip_distributor.c with
DISTRIBUTOR_POOL_SIZE=1
Steps to reproduce:
1. Party A calls Party B (bridged call 'AB')
2. Party B places Party A on hold
3. Party B calls Voicemail app (non-bridged call 'BV')
4. Party B attended transfers Party A to voicemail using REFER.
5. When asterisk masquerades calls 'AB' and 'BV',
a deadlock is happened.
This patch adds a suspension indicator to the taskprocessor.
When a session suspends/unsuspends the serializer
it sets the indicator to the appropriate state.
The session checks the suspension indicator before
suspend the serializer.
ASTERISK-26145 #close
Change-Id: Iaaebee60013a58c942ba47b1b4930a63e686663b
Diffstat (limited to 'codecs/ex_ilbc.h')
0 files changed, 0 insertions, 0 deletions