Changeset 927f27d8c6feedb36da0b1e442bb897e2be6f90e

Show
Ignore:
Timestamp:
12/17/07 21:27:03 (9 months ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1197923223 +0000
git-parent:

[cbe2c26778b462d055750a1160b386d2024be7fb]

git-author:
Rémi Denis-Courmont <rem@videolan.org> 1197923223 +0000
Message:

Save one memory copy and fix the helper module leak

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/vlc_modules_macros.h

    r2bca4f1 r927f27d  
    122122#define vlc_module_end( )                                                     \ 
    123123        }                                                                     \ 
    124         res = config_Duplicate( p_module, p_config, ++i_config );             \ 
    125         free( p_config );                                                     \ 
    126         if (res)                                                              \ 
    127             return res;                                                       \ 
    128         return VLC_SUCCESS;                                                   \ 
     124        return config_Duplicate( p_module, p_config, ++i_config );            \ 
    129125                                                                              \ 
    130126    error:                                                                    \ 
    131         free( p_config );                                                     \ 
     127        /* FIXME: config_Free( p_config ); */                                 \ 
    132128        /* FIXME: cleanup submodules objects ??? */                           \ 
    133129        return VLC_EGENERIC;                                                  \ 
  • src/config/core.c

    rcbe2c26 r927f27d  
    493493 
    494494    /* Calculate the structure length */ 
    495     p_module->i_config_items = 0; 
    496     p_module->i_bool_items = 0; 
    497  
    498495    for( p_item = p_orig; p_item < p_end; p_item++ ) 
    499496    { 
     
    509506    } 
    510507 
    511     /* Allocate memory */ 
    512     p_module->p_config = (module_config_t *)calloc( n, sizeof(*p_orig) ); 
    513     if( p_module->p_config == NULL ) 
    514     { 
    515         msg_Err( p_module, "config error: can't duplicate p_config" ); 
    516         return VLC_ENOMEM; 
    517     } 
     508    p_module->p_config = p_orig; 
    518509    p_module->confsize = n; 
    519510 
     
    521512    for( size_t i = 0; i < n ; i++ ) 
    522513    { 
    523         p_module->p_config[i] = p_orig[i]; 
    524514        p_module->p_config[i].p_lock = &p_module->object_lock; 
    525515    } 
  • src/modules/entry.c

    rcbe2c26 r927f27d  
    4141    module->psz_capability = ""; 
    4242    module->i_score = 1; 
     43    module->i_config_items = module->i_bool_items = 0; 
     44 
    4345    return module; 
    4446} 
     
    162164    tab[confsize].p_lock = &module->object_lock; 
    163165 
     166    if (type & CONFIG_ITEM) 
     167    { 
     168        module->i_config_items++; 
     169        if (type == CONFIG_ITEM_BOOL) 
     170            module->i_bool_items++; 
     171    } 
     172 
    164173    return tab + confsize; 
    165174}