<p> Attention is currently required from: Michael Bradeen, Joshua Colp, Benjamin Keith Ford. </p>
<p>Patch set 5:<span style="border-radius: 3px; display: inline-block; margin: 0 2px; padding: 4px;background-color: #ffd4d4; color: #000000;">Code-Review -1</span></p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/17955">View Change</a></p><p>6 comments:</p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0;"><p><a href="null">File include/asterisk/taskprocessor.h:</a></p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/17955/comment/6818e6b8_6713749b">Patch Set #5, Line 67:</a> <code style="font-family:monospace,monospace">#define AST_TASKPROCESSOR_SHUTDOWN_MAX_WAIT 10</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">Move this to taskprocessor.c since it's not referenced from anywhere else.</p></li></ul></li><li style="margin: 0; padding: 0;"><p><a href="null">File main/taskprocessor.c:</a></p><ul style="list-style: none; padding: 0;"><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/17955/comment/1b0fcc0a_29e95b67">Patch Set #5, Line 298:</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;">    /* During shutdown there may still be taskprocessor threads running and those<br>  * tasprocessors reference tps_singletons.  When those taskprocessors finish<br>   * they will call ast_taskprocessor_unreference, creating a race condition which<br>       * can result in tps_singletons being referenced after being deleted. To try and<br>       * avoid this we check the container count and if greater than zero, give the<br>  * running taskprocessors a chance to finish */<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">Not sure if this is the right fix here. Kinda feels like a "hack". It does not alleviate the problem, just lessens the chance a bit.</p><p style="white-space: pre-wrap; word-wrap: break-word;">Maybe we should instead decouple the unreferencing of a task processor from it's removal from the global container?</p><p style="white-space: pre-wrap; word-wrap: break-word;">Even then I guess we might still need to have a timed wait for the task processors to complete, so maybe this is fine. Or find a way for tasks to safely be interrupted or "killed".</p><p style="white-space: pre-wrap; word-wrap: break-word;">As a note to the last point even after the task processor is removed from the container its listener is then "shutdown" afterwards, so there is still a bit of a shutdown race on top of the tps_singletons race condition.</p></li><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/17955/comment/f8093285_1eb96f3c">Patch Set #5, Line 306:</a> <code style="font-family:monospace,monospace">                 "taskprocessor shutdown with %d tps object(s) still allocated.\n",    objcount);</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">There is a "tab" after the comma here. Should be a space.</p></li><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/17955/comment/3330fa7e_2ed8d9d6">Patch Set #5, Line 311:</a> <code style="font-family:monospace,monospace">                        while(nanosleep(&delay, &delay));</code></p><p style="white-space: pre-wrap; word-wrap: break-word;">Put a space between the "while" and "("</p></li><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/17955/comment/82cb0bbd_97b0e717">Patch Set #5, Line 317:</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;">                    delay.tv_sec = 1;<br>                     delay.tv_sec = 0;<br>             }<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">Log a notice or something on each loop so the user is aware of what's going on. Otherwise Asterisk may appear "hung".</p></li><li style="margin: 0; padding: 0 0 0 16px;"><p style="margin-bottom: 4px;"><a href="https://gerrit.asterisk.org/c/asterisk/+/17955/comment/d4197e6a_1822e695">Patch Set #5, Line 325:</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;">                ast_log(LOG_ERROR,<br>                    "taskprocessor shutdown while tasks still runing, assertion may occur!\n");<br></pre></blockquote></p><p style="white-space: pre-wrap; word-wrap: break-word;">Think it would make sense here to also log the names of any taskprocessors still in the container. It might make it easier for someone to investigate later?</p></li></ul></li></ul><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/17955">change 17955</a>. To unsubscribe, or for help writing mail filters, 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/c/asterisk/+/17955"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-Change-Id: Ia932fc003d316389b9c4fd15ad6594458c9727f1 </div>
<div style="display:none"> Gerrit-Change-Number: 17955 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: Michael Bradeen <mbradeen@sangoma.com> </div>
<div style="display:none"> Gerrit-Reviewer: Benjamin Keith Ford <bford@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Friendly Automation </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-Reviewer: Kevin Harwell <kharwell@digium.com> </div>
<div style="display:none"> Gerrit-Attention: Michael Bradeen <mbradeen@sangoma.com> </div>
<div style="display:none"> Gerrit-Attention: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-Attention: Benjamin Keith Ford <bford@digium.com> </div>
<div style="display:none"> Gerrit-Comment-Date: Mon, 07 Feb 2022 23:52:13 +0000 </div>
<div style="display:none"> Gerrit-HasComments: Yes </div>
<div style="display:none"> Gerrit-Has-Labels: Yes </div>
<div style="display:none"> Gerrit-MessageType: comment </div>