[asterisk-dev] [Code Review] 3184: Create sorcery instance registry

rmudgett reviewboard at asterisk.org
Thu Feb 6 14:21:03 CST 2014


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



branches/12/include/asterisk/sorcery.h
<https://reviewboard.asterisk.org/r/3184/#comment20345>

    Spacing
    const char *module



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20342>

    These should be set NULL after cleanup so the pointer is not dangling on destroyed data.



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20343>

    instance = alloc();
    if (!instance) {
    }
    
    The above is a better format because there are more and better line break opportunities available with the stand alone assignment statement than when combining the assignment into the if test.
    
    Also you don't need the error message here because the alloc has already given a memory allocation failure error message.



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20346>

    It is best to have a blank line between declarations and code.



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20347>

    spacing
    const char *module_name



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20350>

    Use ao2_wrlock() instead since the instances container has a rwlock.  ao2_lock() is a synonym for ao2_wrlock() when an object has a rwlock.



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20349>

    Use OBJ_SEARCH_KEY not OBJ_KEY.



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20351>

    OBJ_SEARCH_KEY



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20353>

    There are two red flags here:
    1) You are using sorcery after you have released your ref to it.
    
    2) Any time you are looking at the number of references left, there is a design problem.  In this case, only the owner of the sorcery object should close/destroy it which will remove it from the instances container.  Only the owner of the sorcery object should open/create it which will add it to the instances container.  Everyone else will search the instances container for the object to get a reference.



branches/12/main/sorcery.c
<https://reviewboard.asterisk.org/r/3184/#comment20355>

    This ao2_find is really an ao2_unlink().


- rmudgett


On Feb. 6, 2014, 2:07 p.m., George Joseph wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3184/
> -----------------------------------------------------------
> 
> (Updated Feb. 6, 2014, 2:07 p.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Bugs: ASTERISK-22537
>     https://issues.asterisk.org/jira/browse/ASTERISK-22537
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> Create sorcery instance registry as a precursor to creating a generic dialplan function that can retrieve parameters from a sorcery-based config file.
> 
> ast_sorcery_init now creates a hashtab as a registry.
> ast_sorcery_open now checks the hashtab for an existing sorcery instance matching the caller's module name.  If it finds one, it bumps the refcount and returns it.  If not, it creates a new sorcery instance, adds it to the hashtab, then returns it.
> ast_sorcery_retrieve_by_module_name is a new function that does a hashtab lookup by module name.  It can be called by the future dialplan function.
> 
> A side effect of this patch is that a module can only have 1 sorcery instance (because it's the key for the hashtab).  res_pjsip/config_system needed a small change to share the main res_pjsip sorcery instance.
> 
> 
> Diffs
> -----
> 
>   branches/12/tests/test_sorcery.c 407566 
>   branches/12/res/res_pjsip/include/res_pjsip_private.h 407566 
>   branches/12/res/res_pjsip/config_system.c 407566 
>   branches/12/res/res_pjsip.c 407566 
>   branches/12/main/sorcery.c 407566 
>   branches/12/include/asterisk/sorcery.h 407566 
> 
> Diff: https://reviewboard.asterisk.org/r/3184/diff/
> 
> 
> Testing
> -------
> 
> Made sure that users of sorcery (mostly res_pjsip) continued to load their configs correctly.
> Made sure there were no ill effects on res_pjsip from config_system sharing the same sorcery instance as the rest of the pjsip infrastructure.
> Made sure that config_system was properly marked as 'not reloadable' and that it was maintaining it's original values when res_pjsip was reloaded.
> 
> 
> ernie*CLI> test execute category /main/sorcery/
> Running all available tests matching category /main/sorcery/
> 
> START  /main/sorcery/ - configuration_file_wizard_retrieve_multiple_all 
> END    /main/sorcery/ - configuration_file_wizard_retrieve_multiple_all Time: <1ms Result: PASS
> [snip]
> START  /main/sorcery/ - open 
> END    /main/sorcery/ - open Time: <1ms Result: PASS
> START  /main/sorcery/ - wizard_registration 
> END    /main/sorcery/ - wizard_registration Time: <1ms Result: PASS
> 
> 43 Test(s) Executed  43 Passed  0 Failed
> 
> 
> Thanks,
> 
> George Joseph
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140206/4a350175/attachment-0001.html>


More information about the asterisk-dev mailing list