<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/3463/">https://reviewboard.asterisk.org/r/3463/</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, George Joseph, Joshua Colp, and rmudgett.</div>
<div>By Corey Farrell.</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;">This patch is not ready to be committed, I'm posting it now to determine if this feature is wanted.  I realize that I have ignored REF_DEBUG tags in many places, that will be taken care of if it is decided that we should proceed with this feature (same with documentation).

This introduces possible locking from inside ao2_ref, but only when unreferencing an object that is cached.  Safe use of container cache's require that they be locked when retrieving or removing objects.  Since cached objects hold a reference to the cache, this is needed for safety.  This means that a container can't be freed until it is cleared of cached objects.

ao2_cache_enable is meant to run immediately after ao2_alloc to add a new object to it's cache.  I don't care much for the procedure name, I welcome suggestions.

I realize this is more limited than George's original proposal of being able to add objects to any number of weak containers.  Supporting multiple containers makes it impossible for astobj2.c to safely lock all weak reference owners at the same time, and without that lock it's possible for another thread to retrieve a reference to the object you thought you were destroying.  Given the additional complexity and risk of supporting multiple weak containers, I have to ask why would we need that?

One question of safety I have, do I need to use atomic operations to get/set astobj2->priv_data.cached_in?</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;">Only ran tests from tests_astobj2.so, no new tests written for cached objects.  I haven't done any real tests of caching an object in a container.</pre>
  </td>
 </tr>
</table>


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

 <li>/trunk/main/astobj2.c <span style="color: grey">(412466)</span></li>

 <li>/trunk/include/asterisk/astobj2.h <span style="color: grey">(412466)</span></li>

</ul>

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







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




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