> On July 15, 2014, 2 p.m., Corey Farrell wrote:
> > The ability to add an object to multiple weak reference containers is 
> > concerning to me.  I think this adds unnecessary complexity/risk to 
> > astobj2.  If you could tell me a use case where this amount of freedom is 
> > required I might be convinced otherwise.  Otherwise I'd feel much better 
> > with a more limited ability to use weak reference containers:
> > 
> > 1. Only allow the caller of ao2_alloc to add the object to a weak 
> > container, and only one container.
> > 2. Insertion to the weak container should only happen before the object is 
> > reachable outside the local scope.
> > 3. The weak container would be a private detail to the unit that owns it.  
> > All other code would use a method to retrieve references from that 
> > container.
> > 
> > These two rules would greatly reduce the possibility of races, which 
> > reduces the amount of work needed to avoid races.  In particular rule #2 
> > would allow ao2_ref to only perform locking during ao2_ref(obj, -1).  I had 
> > started work on this in r3463 but discarded it when you started splitting 
> > astobj2.c.

We're going to disgree. :)  I think this is a pretty severe restriction and it 
would be more complex to enforce the restriction than to safely allow it.  How 
about this...  If you can break it and I can't reasonably fix it, I'll back 
off.   I know you're busy so just write a pseudo code test case, or just give 
me an idea for one and I'll create a unit test for it.


- George


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3716/#review12583
-----------------------------------------------------------


On July 7, 2014, 10:43 p.m., George Joseph wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3716/
> -----------------------------------------------------------
> 
> (Updated July 7, 2014, 10:43 p.m.)
> 
> 
> Review request for Asterisk Developers, Corey Farrell and rmudgett.
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> Weak Reference Containers are hash containers that don't maintain references 
> to the objects they contain.
> Basically, ao2_link() doesn't increase the ref count and ao2_unlink() doesn't 
> decrease it.
> 
> Sounds simple but because the container doesn't have a reference to the 
> object, it's entirely possible that the objects could be destroyed while 
> still in the container.  Therefore much of the work in this patch is making 
> sure that if the object is destroyed, it's properly cleaned out of any weak 
> reference containers that it may have been in.
> 
> This patch is almost 6000 lines but half of it is units tests...functional, 
> performance, and stress.
> 
> Richard:  I apologize in advance...I undid some of the refactor undos you had 
> me do earlier. :)
> 
> 
> Diffs
> -----
> 
>   branches/12/utils/Makefile 418136 
>   branches/12/tests/test_astobj2_weak.c PRE-CREATION 
>   branches/12/tests/test_astobj2_torture.c PRE-CREATION 
>   branches/12/tests/test_astobj2_thrash.c 418136 
>   branches/12/tests/test_astobj2.c 418136 
>   branches/12/main/astobj2_weak.c PRE-CREATION 
>   branches/12/main/astobj2_rbtree.c 418136 
>   branches/12/main/astobj2_private.h 418136 
>   branches/12/main/astobj2_hash_private.h PRE-CREATION 
>   branches/12/main/astobj2_hash.c 418136 
>   branches/12/main/astobj2_container_private.h 418136 
>   branches/12/main/astobj2_container.c 418136 
>   branches/12/main/astobj2.c 418136 
>   branches/12/include/asterisk/astobj2.h 418136 
> 
> Diff: https://reviewboard.asterisk.org/r/3716/diff/
> 
> 
> Testing
> -------
> 
> A whole slew of unit tests were added and the existing astobj2 tests were 
> modified to also test weak containers.  All passed.
> A torture test was added that tests multiple threads accessing multiple 
> containers for weak, hash and rbtree containers.  All passed.
> The full Testsuite was run with the same number of tests passing that passed 
> before the patch.
> 
> 
> Thanks,
> 
> George Joseph
> 
>

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to