<p>Richard Mudgett <strong>posted comments</strong> on this change.</p><p><a href="https://gerrit.asterisk.org/5851">View Change</a></p><p>Patch set 2:<span style="border-radius: 3px; display: inline-block; margin: 0 2px; padding: 4px;background-color: #ffd4d4;">Code-Review -1</span></p><p style="white-space: pre-wrap; word-wrap: break-word;">This is pulling the comments from the previous review that still need to be addressed.</p><p>(3 comments)</p><ul style="list-style: none; padding-left: 20px;"><li><p><a href="https://gerrit.asterisk.org/#/c/5851/2/include/asterisk/res_pjsip_session.h">File include/asterisk/res_pjsip_session.h:</a></p><ul style="list-style: none; padding-left: 20px;"><li><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/#/c/5851/2/include/asterisk/res_pjsip_session.h@126">Patch Set #2, Line 126:</a> </p><p><blockquote style="border-left: 1px solid #aaa; margin: 10px 0; padding: 0 10px;"><pre style="font-family: monospace,monospace; white-space: pre-wrap;"> /*! Lock for vector of session media */<br>       ast_mutex_t media_streams_lock;<br>       /*! Media streams */<br>  AST_VECTOR(, struct ast_sip_session_media *) media;<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">Comment pulled from original review:<br>==========<br>This is going to need a lock to protect access.  The serializer and channel threads have contention for the vector.</p><ul><li>The T.38 frame hooks run under the channel thread.</li><li>The chan pvt for chan_pjsip frame read/write run under the channel thread. Though if the vector is copied to the chan pvt this case may not be a problem.</li><li>I think most other accesses are run under the serializer thread.</li></ul><p style="white-space: pre-wrap; word-wrap: break-word;">The lock is needed even more now because the vector can change during a call if streams are added/removed.<br>==========</p><p style="white-space: pre-wrap; word-wrap: break-word;">The media_streams_lock isn't used yet.</p></li></ul></li><li><p><a href="https://gerrit.asterisk.org/#/c/5851/2/res/res_pjsip_session.c">File res/res_pjsip_session.c:</a></p><ul style="list-style: none; padding-left: 20px;"><li><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/#/c/5851/2/res/res_pjsip_session.c@257">Patch Set #2, Line 257:</a> <code style="font-family:monospace,monospace">               old = AST_VECTOR_GET(&session->media, position);</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">Need to check if the old position exists before we can get it.</p><p style="white-space: pre-wrap; word-wrap: break-word;">Can this vector have empty positions for declined streams?</p></li><li><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/#/c/5851/2/res/res_pjsip_session.c@423">Patch Set #2, Line 423:</a> </p><p><blockquote style="border-left: 1px solid #aaa; margin: 10px 0; padding: 0 10px;"><pre style="font-family: monospace,monospace; white-space: pre-wrap;">static int handle_negotiated_sdp(struct ast_sip_session *session, const pjmedia_sdp_session *local, const pjmedia_sdp_session *remote)<br>{<br>   int i;<br><br>      for (i = 0; i < local->media_count; ++i) {<br>              struct ast_sip_session_media *session_media;<br>          if (!remote->media[i]) {<br>                   continue;<br>             }<br><br>           /* If we're handling negotiated streams, then we should already have set<br>           * up session media instances that correspond to the local SDP, and there should<br>               * be the same number of session medias as there are local streams<br>             */<br>           ast_assert(i < AST_VECTOR_SIZE(&session->media));<br><br>         session_media = AST_VECTOR_GET(&session->media, i);<br>            if (handle_negotiated_sdp_session_media(session_media, session, local, remote, i)) {<br>                  return -1;<br>            }<br>     }<br><br>   return 0;<br>}<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">The queuing of the null frame is missing.  I think there was a reason the null frame was queued when all streams were successfully negotiated.  I don't know if it is still required though.</p></li></ul></li></ul><p>To view, visit <a href="https://gerrit.asterisk.org/5851">change 5851</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/5851"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: comment </div>
<div style="display:none"> Gerrit-Change-Id: I144b04f43633387b8e42a43ef3b25d7c5682b451 </div>
<div style="display:none"> Gerrit-Change-Number: 5851 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Mark Michelson <mmichelson@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins2 </div>
<div style="display:none"> Gerrit-Reviewer: Mark Michelson <mmichelson@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Richard Mudgett <rmudgett@digium.com> </div>
<div style="display:none"> Gerrit-Comment-Date: Thu, 15 Jun 2017 21:02:29 +0000 </div>
<div style="display:none"> Gerrit-HasComments: Yes </div>