[asterisk-dev] [Code Review] Pickup segfault when multiple pickups of multiple localchan calls

Alec Davis reviewboard at asterisk.org
Thu Aug 25 07:19:12 CDT 2011


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1353/
-----------------------------------------------------------

(Updated Aug. 25, 2011, 7:19 a.m.)


Review request for Asterisk Developers and rmudgett.


Changes
-------

updated description.


Summary (updated)
-------

If ast_can_pickup() can pickup the target channel, it also needs to check that the originating parent channel isn't being picked up from one of the other spawned the calls.

Example dialplan below causes a segfault as ast-hangup removes the same channel as is being picked up.

How to crash it!
  dial 801 from 1 phone.
  from 2 phones simultaneously dial 800.
  segfault!

exten => 801,1,NoOp(Local pickup debug: Ring Phones) 
exten => 801,n,Dial(Local/823 at en-phone&Local/824 at en-phone)

exten => 800,1,NoOp(Local pickup: Pickup through Localchan call)
exten => 800,n,Dial(Local/824 at en-pickup&Local/823 at en-pickup)

[en-pickup]
exten => _[0-9*#]!, 1, PickupChan(Local/${EXTEN}@en-phone)

[en-phone]
exten => _[0-9*#]!, 1, Dial(SIP/gxp-${EXTEN},20,rwt)


This addresses bugs ASTERISK-18222 and ASTERISK-18273.
    https://issues.asterisk.org/jira/browse/ASTERISK-18222
    https://issues.asterisk.org/jira/browse/ASTERISK-18273


Diffs
-----

  trunk/channels/chan_local.c 333199 
  trunk/channels/chan_sip.c 333199 
  trunk/include/asterisk/channel.h 333199 
  trunk/main/features.c 333199 

Diff: https://reviewboard.asterisk.org/r/1353/diff


Testing
-------

Party A ring in which triggers off 2 internal localchan calls, as per 801 in the example dialplan.
Party B and Party C, attempt to pickup the same calls, using 800 in the example dialplan.

There is another senario thats not right, before even applying this patch.
Party A ring in, which again triggers 2 internal localchan calls as per 801 in dialplan.
Party B and Party C, use *8 to pickup. We then have a NULL OBJ message on screen, and an orpaned channel.


Thanks,

Alec

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20110825/11b1ed83/attachment.htm>


More information about the asterisk-dev mailing list