<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://reviewboard.asterisk.org/r/4325/">https://reviewboard.asterisk.org/r/4325/</a>
     </td>
    </tr>
   </table>
   <br />




<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Asterisk Developers and Kevin Harwell.</div>
<div>By Mark Michelson.</div>


<p style="color: grey;"><i>Updated Jan. 9, 2015, 3:45 p.m.</i></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Changes</h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Switch to explicit_publish_destroy() instead of kill_it()</pre>
  </td>
 </tr>
</table>





<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>


 <a href="https://issues.asterisk.org/jira/browse/ASTERISK-24655">ASTERISK-24655</a>


</div>



<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
Asterisk
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">If an outbound publish is configured, and that publication never published any data, then a graceful shutdown would result in Asterisk hanging for a while before finally shutting down.

The reason is that the code did not take into account the case where we never started publishing anything. The code would attempt to send a PUBLISH to stop publication, relying on the PUBLISH callback to be called so we could then destroy the PJSIP publishc structure, destroy our publication client, and signal to the unloading code that we were done. The problem is that the PUBLISH callback was never being called, presumably since pjsip_publishc_send() was failing.

I modified the code to outright destroy the PJSIP publishc structure and drop its reference to our publication client if we never actually started publishing anything. This way, shutting down gracefully doesn't wait for a callback that will never occur.

Also, feel free to give a better suggestion for a function name than "kill_it". There are already so many variations on destroying clients in that file, I was a bit bankrupt for ideas.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Reproduced the issue originally as described in ASTERISK-24655. With the patch here, I have confirmed that the issue no longer occurs.

I won't be writing a testsuite test for this, since the testsuite is not really well suited to this sort of thing.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> (updated)</h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>/branches/13/res/res_pjsip_outbound_publish.c <span style="color: grey">(430354)</span></li>

</ul>

<p><a href="https://reviewboard.asterisk.org/r/4325/diff/" style="margin-left: 3em;">View Diff</a></p>







  </td>
 </tr>
</table>




  </div>
 </body>
</html>