<div dir="ltr"><div dir="ltr">On Wed, Dec 9, 2020 at 12:02 PM Dan Cropp <<a href="mailto:dan@amtelco.com">dan@amtelco.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="gmail-m_-6641857721644149720WordSection1">
<p class="MsoNormal">We are working on a patch for the REFER support and have a question on whether a lock is needed or not.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">In chan_pjsip.c function xfer_client_on_evsub_state, code is processing the REFER-NOTIFY subscription.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">It gets an ast_sip_session reference, then it acquires a ast_channel reference.<u></u><u></u></p>
<p class="MsoNormal">Should we make the code bump the lock count for the session’s channel while we use it?  Unlocking when done using it?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Is it safe to assume the channel will not be deleted while this routine is running?<u></u><u></u></p>
<p class="MsoNormal">Obviously, the safest approach is to increment/decrement the reference count while using, but is that the necessary/preferred approach?</p></div></div></blockquote><div><br></div><div>The PJSIP implementation in Asterisk doesn't heavily use locks. Instead it approaches things from a serializer perspective - that is ensuring that things related to a dialog/session can't be done in multiple threads at the same time. To that end the xfer_client_on_evsub_state function should allocate a structure with the appropriate information and queue it up using ast_sip_push_task. You can find this being done in the chan_pjsip_transfer function. This will give you a guarantee that session won't go away, the channel pointer won't go away, and that other threads aren't doing things at the same time.</div></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-family:tahoma,sans-serif"><font color="#073763">Joshua C. Colp</font></div><div style="font-family:tahoma,sans-serif"><font color="#073763">Asterisk Technical Lead</font></div><div style="font-family:tahoma,sans-serif"><font color="#073763">Sangoma Technologies</font></div><div style="font-family:tahoma,sans-serif"><font color="#073763">Check us out at <a href="http://www.sangoma.com" target="_blank">www.sangoma.com</a> and <a href="http://www.asterisk.org" target="_blank">www.asterisk.org</a></font><br></div></div></div></div></div></div></div></div></div></div></div>