----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviewboard.asterisk.org/r/3780/#review13030 -----------------------------------------------------------
/trunk/res/res_pjsip_outbound_publish.c <https://reviewboard.asterisk.org/r/3780/#comment23459> This bit here is problematic. Consider the case that existing->state->sending is false. You push the task of sending the unpublish() to the threadpool. This gets queued behind a task (or multiple tasks, even) to service the publication queue. We service the publication queue and send out a publication. We receive the response for the publication. Since the 'destroy' field is set, we call pjsip_publishc_destroy() in the callback. Eventually, the queued unpublish task executes. Problem is, we've destroyed the pjsip_publishc. When we attempt to call pjsip_publishc_send() to send the unpublish, there will be a crash since PJSIP will attempt to lock a destroyed mutex. Somehow, you have to ensure that you don't call pjsip_publishc_destroy() in the callback until you know you are handling the response to the unpublish. You could have a reasonable guess at this by checking for the destroy flag in the callback and for checking if the response has an Expires: 0 header in it. - Mark Michelson On Aug. 5, 2014, 5:37 p.m., Joshua Colp wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviewboard.asterisk.org/r/3780/ > ----------------------------------------------------------- > > (Updated Aug. 5, 2014, 5:37 p.m.) > > > Review request for Asterisk Developers. > > > Repository: Asterisk > > > Description > ------- > > This adds two PJSIP modules which add outbound PUBLISH support and an > 'asterisk' event type. > > The res_pjsip_outbound_publish module is a common module which provides basic > logic for setting up outbound PUBLISH clients, handling authentication > requests, handling configuration, and lifetime. Extra modules implement > specific event types which are registered with res_pjsip_outbound_publish. > Since it takes care of configuration when an outbound PUBLISH is configured > extra configuration can be passed to the event type implementation to further > configure itself. > > The res_pjsip_publish_asterisk module implements inbound and outbound support > for an 'asterisk' event type. This event type conveys device and mailbox > state between Asterisk instances using a JSON content body. As internal > device or mailbox state changes the module sends a PUBLISH message to other > configured instances. When a PUBLISH is received the contents are examined > and a device or mailbox state change queued up within Asterisk. To restrict > what is sent and received filtering is available using regular expressions > which can reduce SIP traffic. > > A wiki page is available at > https://wiki.asterisk.org/wiki/display/~jcolp/Exchanging+Device+and+Mailbox+State+Using+PJSIP > which has some configuration details with some examples. This should also be > reviewed. > > > Diffs > ----- > > /trunk/res/res_pjsip_pubsub.exports.in 420047 > /trunk/res/res_pjsip_pubsub.c 420047 > /trunk/res/res_pjsip_publish_asterisk.c PRE-CREATION > /trunk/res/res_pjsip_outbound_publish.exports.in PRE-CREATION > /trunk/res/res_pjsip_outbound_publish.c PRE-CREATION > /trunk/include/asterisk/res_pjsip_pubsub.h 420047 > /trunk/include/asterisk/res_pjsip_outbound_publish.h PRE-CREATION > > Diff: https://reviewboard.asterisk.org/r/3780/diff/ > > > Testing > ------- > > Set up two Asterisk instances, configured both sides to publish to eachother, > made calls and manipulated voicemail. Watched PUBLISH messages go between > them and state change. > > > Thanks, > > Joshua Colp > >
-- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
