Changeset 609a114637e858ff03123decde419019803f8b08

Show
Ignore:
Timestamp:
08/16/07 20:01:01 (1 year ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1187287261 +0000
git-parent:

[c5f25910d5f06ce85c4dc9bf9d81e98b5c401328]

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

Hide internal variables state

Files:

Legend:

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

    r98cb4bf r609a114  
    563563    vlc_bool_t b_force;      /**< set by the outside (eg. module_Need()) */ \ 
    564564                                                                            \ 
    565     /* Object variables */                                                  \ 
    566     vlc_mutex_t     var_lock;                                               \ 
    567     int             i_vars;                                                 \ 
    568     variable_t *    p_vars;                                                 \ 
    569                                                                             \ 
    570565    /* Stuff related to the libvlc structure */                             \ 
    571566    libvlc_int_t *p_libvlc;                  /**< (root of all evil) - 1 */ \ 
  • src/libvlc.h

    r3ea2708 r609a114  
    8383struct vlc_object_internals_t 
    8484{ 
     85    /* Object variables */ 
     86    vlc_mutex_t     var_lock; 
     87    int             i_vars; 
     88    variable_t *    p_vars; 
     89}; 
    8590 
    86 }; 
    8791 
    8892static inline vlc_object_internals_t *vlc_internals( vlc_object_t *obj ) 
  • src/misc/objects.c

    r2e251e2 r609a114  
    126126    p_new->psz_header = NULL; 
    127127 
    128     p_new->i_flags = 0; 
    129128    if( p_this->i_flags & OBJECT_FLAGS_NODBG ) 
    130129        p_new->i_flags |= OBJECT_FLAGS_NODBG; 
     
    134133        p_new->i_flags |= OBJECT_FLAGS_NOINTERACT; 
    135134 
    136     p_new->i_vars = 0; 
    137     p_new->p_vars = (variable_t *)malloc( 16 * sizeof( variable_t ) ); 
    138  
    139     if( !p_new->p_vars ) 
     135    p_priv->p_vars = calloc( sizeof( variable_t ), 16 ); 
     136 
     137    if( !p_priv->p_vars ) 
    140138    { 
    141139        if( i_type != VLC_OBJECT_GLOBAL ) 
     
    187185    vlc_mutex_init( p_new, &p_new->object_lock ); 
    188186    vlc_cond_init( p_new, &p_new->object_wait ); 
    189     vlc_mutex_init( p_new, &p_new->var_lock ); 
     187    vlc_mutex_init( p_new, &p_priv->var_lock ); 
    190188 
    191189    if( i_type == VLC_OBJECT_GLOBAL ) 
     
    391389    /* Destroy the associated variables, starting from the end so that 
    392390     * no memmove calls have to be done. */ 
    393     while( p_this->i_vars ) 
    394     { 
    395         var_Destroy( p_this, p_this->p_vars[p_this->i_vars - 1].psz_name ); 
    396     } 
    397  
    398     free( p_this->p_vars ); 
    399     vlc_mutex_destroy( &p_this->var_lock ); 
     391    while( p_priv->i_vars ) 
     392    { 
     393        var_Destroy( p_this, p_priv->p_vars[p_priv->i_vars - 1].psz_name ); 
     394    } 
     395 
     396    free( p_priv->p_vars ); 
     397    vlc_mutex_destroy( &p_priv->var_lock ); 
    400398 
    401399    if( p_this->psz_header ) free( p_this->psz_header ); 
     
    878876            PrintObject( p_object, "" ); 
    879877 
    880             if( !p_object->i_vars ) 
     878            if( !p_object->p_internals->i_vars ) 
    881879                printf( " `-o No variables\n" ); 
    882             for( i = 0; i < p_object->i_vars; i++ ) 
    883             { 
    884                 variable_t *p_var = p_object->p_vars + i; 
     880            for( i = 0; i < p_object->p_internals->i_vars; i++ ) 
     881            { 
     882                variable_t *p_var = p_object->p_internals->p_vars + i; 
    885883 
    886884                const char *psz_type = "unknown"; 
     
    908906                } 
    909907                printf( " %c-o \"%s\" (%s", 
    910                         i + 1 == p_object->i_vars ? '`' : '|', 
     908                        i + 1 == p_object->p_internals->i_vars ? '`' : '|', 
    911909                        p_var->psz_name, psz_type ); 
    912910                if( p_var->psz_text ) 
  • src/misc/variables.c

    r3ea2708 r609a114  
    158158    variable_t *p_var; 
    159159    static vlc_list_t dummy_null_list = {0, NULL, NULL}; 
    160  
    161     vlc_mutex_lock( &p_this->var_lock ); 
     160    vlc_object_internals_t *p_priv = p_this->p_internals; 
     161 
     162    vlc_mutex_lock( &p_priv->var_lock ); 
    162163 
    163164    /* FIXME: if the variable already exists, we don't duplicate it. But we 
     
    165166     * time to rework Insert() so that only one lookup has to be done, feel 
    166167     * free to do so. */ 
    167     i_new = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     168    i_new = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    168169 
    169170    if( i_new >= 0 ) 
    170171    { 
    171172        /* If the types differ, variable creation failed. */ 
    172         if( (i_type & ~(VLC_VAR_DOINHERIT|VLC_VAR_ISCOMMAND)) != p_this->p_vars[i_new].i_type ) 
    173         { 
    174             vlc_mutex_unlock( &p_this->var_lock ); 
     173        if( (i_type & ~(VLC_VAR_DOINHERIT|VLC_VAR_ISCOMMAND)) != p_priv->p_vars[i_new].i_type ) 
     174        { 
     175            vlc_mutex_unlock( &p_priv->var_lock ); 
    175176            return VLC_EBADVAR; 
    176177        } 
    177178 
    178         p_this->p_vars[i_new].i_usage++; 
     179        p_priv->p_vars[i_new].i_usage++; 
    179180        if( i_type & VLC_VAR_ISCOMMAND ) 
    180             p_this->p_vars[i_new].i_type |= VLC_VAR_ISCOMMAND; 
    181         vlc_mutex_unlock( &p_this->var_lock ); 
     181            p_priv->p_vars[i_new].i_type |= VLC_VAR_ISCOMMAND; 
     182        vlc_mutex_unlock( &p_priv->var_lock ); 
    182183        return VLC_SUCCESS; 
    183184    } 
    184185 
    185     i_new = Insert( p_this->p_vars, p_this->i_vars, psz_name ); 
    186  
    187     if( (p_this->i_vars & 15) == 15 ) 
    188     { 
    189         p_this->p_vars = realloc( p_this->p_vars, 
    190                                   (p_this->i_vars+17) * sizeof(variable_t) ); 
    191     } 
    192  
    193     memmove( p_this->p_vars + i_new + 1, 
    194              p_this->p_vars + i_new, 
    195              (p_this->i_vars - i_new) * sizeof(variable_t) ); 
    196  
    197     p_this->i_vars++; 
    198  
    199     p_var = &p_this->p_vars[i_new]; 
     186    i_new = Insert( p_priv->p_vars, p_priv->i_vars, psz_name ); 
     187 
     188    if( (p_priv->i_vars & 15) == 15 ) 
     189    { 
     190        p_priv->p_vars = realloc( p_priv->p_vars, 
     191                                  (p_priv->i_vars+17) * sizeof(variable_t) ); 
     192    } 
     193 
     194    memmove( p_priv->p_vars + i_new + 1, 
     195             p_priv->p_vars + i_new, 
     196             (p_priv->i_vars - i_new) * sizeof(variable_t) ); 
     197 
     198    p_priv->i_vars++; 
     199 
     200    p_var = &p_priv->p_vars[i_new]; 
    200201    memset( p_var, 0, sizeof(*p_var) ); 
    201202 
     
    302303    } 
    303304 
    304     vlc_mutex_unlock( &p_this->var_lock ); 
     305    vlc_mutex_unlock( &p_priv->var_lock ); 
    305306 
    306307    return VLC_SUCCESS; 
     
    320321    int i_var, i; 
    321322    variable_t *p_var; 
    322  
    323     vlc_mutex_lock( &p_this->var_lock ); 
     323    vlc_object_internals_t *p_priv = p_this->p_internals; 
     324 
     325    vlc_mutex_lock( &p_priv->var_lock ); 
    324326 
    325327    i_var = GetUnused( p_this, psz_name ); 
    326328    if( i_var < 0 ) 
    327329    { 
    328         vlc_mutex_unlock( &p_this->var_lock ); 
     330        vlc_mutex_unlock( &p_priv->var_lock ); 
    329331        return i_var; 
    330332    } 
    331333 
    332     p_var = &p_this->p_vars[i_var]; 
     334    p_var = &p_priv->p_vars[i_var]; 
    333335 
    334336    if( p_var->i_usage > 1 ) 
    335337    { 
    336338        p_var->i_usage--; 
    337         vlc_mutex_unlock( &p_this->var_lock ); 
     339        vlc_mutex_unlock( &p_priv->var_lock ); 
    338340        return VLC_SUCCESS; 
    339341    } 
     
    364366    if( p_var->psz_text ) free( p_var->psz_text ); 
    365367 
    366     memmove( p_this->p_vars + i_var, 
    367              p_this->p_vars + i_var + 1, 
    368              (p_this->i_vars - i_var - 1) * sizeof(variable_t) ); 
    369  
    370     if( (p_this->i_vars & 15) == 0 ) 
    371     { 
    372         p_this->p_vars = realloc( p_this->p_vars, 
    373                           (p_this->i_vars) * sizeof( variable_t ) ); 
    374     } 
    375  
    376     p_this->i_vars--; 
    377  
    378     vlc_mutex_unlock( &p_this->var_lock ); 
     368    memmove( p_priv->p_vars + i_var, 
     369             p_priv->p_vars + i_var + 1, 
     370             (p_priv->i_vars - i_var - 1) * sizeof(variable_t) ); 
     371 
     372    if( (p_priv->i_vars & 15) == 0 ) 
     373    { 
     374        p_priv->p_vars = realloc( p_priv->p_vars, 
     375                          (p_priv->i_vars) * sizeof( variable_t ) ); 
     376    } 
     377 
     378    p_priv->i_vars--; 
     379 
     380    vlc_mutex_unlock( &p_priv->var_lock ); 
    379381 
    380382    return VLC_SUCCESS; 
     
    396398    variable_t *p_var; 
    397399    vlc_value_t oldval; 
    398  
    399     vlc_mutex_lock( &p_this->var_lock ); 
    400  
    401     i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     400    vlc_object_internals_t *p_priv = p_this->p_internals; 
     401 
     402    vlc_mutex_lock( &p_priv->var_lock ); 
     403 
     404    i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    402405 
    403406    if( i_var < 0 ) 
    404407    { 
    405         vlc_mutex_unlock( &p_this->var_lock ); 
     408        vlc_mutex_unlock( &p_priv->var_lock ); 
    406409        return VLC_ENOVAR; 
    407410    } 
    408411 
    409     p_var = &p_this->p_vars[i_var]; 
     412    p_var = &p_priv->p_vars[i_var]; 
    410413 
    411414    switch( i_action ) 
     
    483486            { 
    484487                /* Not found */ 
    485                 vlc_mutex_unlock( &p_this->var_lock ); 
     488                vlc_mutex_unlock( &p_priv->var_lock ); 
    486489                return VLC_EGENERIC; 
    487490            } 
     
    656659 
    657660                    p_var->b_incallback = VLC_TRUE; 
    658                     vlc_mutex_unlock( &p_this->var_lock ); 
     661                    vlc_mutex_unlock( &p_priv->var_lock ); 
    659662 
    660663                    /* The real calls */ 
     
    665668                    } 
    666669 
    667                     vlc_mutex_lock( &p_this->var_lock ); 
    668  
    669                     i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     670                    vlc_mutex_lock( &p_priv->var_lock ); 
     671 
     672                    i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    670673                    if( i_var < 0 ) 
    671674                    { 
    672675                        msg_Err( p_this, "variable %s has disappeared", psz_name ); 
    673                         vlc_mutex_unlock( &p_this->var_lock ); 
     676                        vlc_mutex_unlock( &p_priv->var_lock ); 
    674677                        return VLC_ENOVAR; 
    675678                    } 
    676679 
    677                     p_var = &p_this->p_vars[i_var]; 
     680                    p_var = &p_priv->p_vars[i_var]; 
    678681                    p_var->b_incallback = VLC_FALSE; 
    679682                } 
     
    685688    } 
    686689 
    687     vlc_mutex_unlock( &p_this->var_lock ); 
     690    vlc_mutex_unlock( &p_priv->var_lock ); 
    688691 
    689692    return VLC_SUCCESS; 
     
    700703{ 
    701704    int i_var, i_type; 
    702  
    703     vlc_mutex_lock( &p_this->var_lock ); 
    704  
    705     i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     705    vlc_object_internals_t *p_priv = p_this->p_internals; 
     706 
     707    vlc_mutex_lock( &p_priv->var_lock ); 
     708 
     709    i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    706710 
    707711    if( i_var < 0 ) 
    708712    { 
    709         vlc_mutex_unlock( &p_this->var_lock ); 
     713        vlc_mutex_unlock( &p_priv->var_lock ); 
    710714        return 0; 
    711715    } 
    712716 
    713     i_type = p_this->p_vars[i_var].i_type; 
    714  
    715     vlc_mutex_unlock( &p_this->var_lock ); 
     717    i_type = p_priv->p_vars[i_var].i_type; 
     718 
     719    vlc_mutex_unlock( &p_priv->var_lock ); 
    716720 
    717721    return i_type; 
     
    730734    variable_t *p_var; 
    731735    vlc_value_t oldval; 
    732  
    733     vlc_mutex_lock( &p_this->var_lock ); 
     736    vlc_object_internals_t *p_priv = p_this->p_internals; 
     737 
     738    vlc_mutex_lock( &p_priv->var_lock ); 
    734739 
    735740    i_var = GetUnused( p_this, psz_name ); 
    736741    if( i_var < 0 ) 
    737742    { 
    738         vlc_mutex_unlock( &p_this->var_lock ); 
     743        vlc_mutex_unlock( &p_priv->var_lock ); 
    739744        return i_var; 
    740745    } 
    741746 
    742     p_var = &p_this->p_vars[i_var]; 
     747    p_var = &p_priv->p_vars[i_var]; 
    743748 
    744749    /* Duplicate data if needed */ 
     
    763768 
    764769        p_var->b_incallback = VLC_TRUE; 
    765         vlc_mutex_unlock( &p_this->var_lock ); 
     770        vlc_mutex_unlock( &p_priv->var_lock ); 
    766771 
    767772        /* The real calls */ 
     
    772777        } 
    773778 
    774         vlc_mutex_lock( &p_this->var_lock ); 
    775  
    776         i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     779        vlc_mutex_lock( &p_priv->var_lock ); 
     780 
     781        i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    777782        if( i_var < 0 ) 
    778783        { 
    779784            msg_Err( p_this, "variable %s has disappeared", psz_name ); 
    780             vlc_mutex_unlock( &p_this->var_lock ); 
     785            vlc_mutex_unlock( &p_priv->var_lock ); 
    781786            return VLC_ENOVAR; 
    782787        } 
    783788 
    784         p_var = &p_this->p_vars[i_var]; 
     789        p_var = &p_priv->p_vars[i_var]; 
    785790        p_var->b_incallback = VLC_FALSE; 
    786791    } 
     
    789794    p_var->pf_free( &oldval ); 
    790795 
    791     vlc_mutex_unlock( &p_this->var_lock ); 
     796    vlc_mutex_unlock( &p_priv->var_lock ); 
    792797 
    793798    return VLC_SUCCESS; 
     
    806811    int i_var; 
    807812    variable_t *p_var; 
    808  
    809     vlc_mutex_lock( &p_this->var_lock ); 
    810  
    811     i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     813    vlc_object_internals_t *p_priv = p_this->p_internals; 
     814 
     815    vlc_mutex_lock( &p_priv->var_lock ); 
     816 
     817    i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    812818 
    813819    if( i_var < 0 ) 
    814820    { 
    815         vlc_mutex_unlock( &p_this->var_lock ); 
     821        vlc_mutex_unlock( &p_priv->var_lock ); 
    816822        return VLC_ENOVAR; 
    817823    } 
    818824 
    819     p_var = &p_this->p_vars[i_var]; 
     825    p_var = &p_priv->p_vars[i_var]; 
    820826 
    821827    /* Really get the variable */ 
     
    825831    p_var->pf_dup( p_val ); 
    826832 
    827     vlc_mutex_unlock( &p_this->var_lock ); 
     833    vlc_mutex_unlock( &p_priv->var_lock ); 
    828834 
    829835    return VLC_SUCCESS; 
     
    869875    variable_t *p_var; 
    870876    callback_entry_t entry; 
     877    vlc_object_internals_t *p_priv = p_this->p_internals; 
    871878 
    872879    entry.pf_callback = pf_callback; 
    873880    entry.p_data = p_data; 
    874881 
    875     vlc_mutex_lock( &p_this->var_lock ); 
     882    vlc_mutex_lock( &p_priv->var_lock ); 
    876883 
    877884    i_var = GetUnused( p_this, psz_name ); 
    878885    if( i_var < 0 ) 
    879886    { 
    880         vlc_mutex_unlock( &p_this->var_lock ); 
     887        vlc_mutex_unlock( &p_priv->var_lock ); 
    881888        return i_var; 
    882889    } 
    883890 
    884     p_var = &p_this->p_vars[i_var]; 
     891    p_var = &p_priv->p_vars[i_var]; 
    885892 
    886893    INSERT_ELEM( p_var->p_entries, 
     
    889896                 entry ); 
    890897 
    891     vlc_mutex_unlock( &p_this->var_lock ); 
     898    vlc_mutex_unlock( &p_priv->var_lock ); 
    892899 
    893900    return VLC_SUCCESS; 
     
    905912    int i_entry, i_var; 
    906913    variable_t *p_var; 
    907  
    908     vlc_mutex_lock( &p_this->var_lock ); 
     914    vlc_object_internals_t *p_priv = p_this->p_internals; 
     915 
     916    vlc_mutex_lock( &p_priv->var_lock ); 
    909917 
    910918    i_var = GetUnused( p_this, psz_name ); 
    911919    if( i_var < 0 ) 
    912920    { 
    913         vlc_mutex_unlock( &p_this->var_lock ); 
     921        vlc_mutex_unlock( &p_priv->var_lock ); 
    914922        return i_var; 
    915923    } 
    916924 
    917     p_var = &p_this->p_vars[i_var]; 
     925    p_var = &p_priv->p_vars[i_var]; 
    918926 
    919927    for( i_entry = p_var->i_entries ; i_entry-- ; ) 
     
    928936    if( i_entry < 0 ) 
    929937    { 
    930         vlc_mutex_unlock( &p_this->var_lock ); 
     938        vlc_mutex_unlock( &p_priv->var_lock ); 
    931939        return VLC_EGENERIC; 
    932940    } 
     
    934942    REMOVE_ELEM( p_var->p_entries, p_var->i_entries, i_entry ); 
    935943 
    936     vlc_mutex_unlock( &p_this->var_lock ); 
     944    vlc_mutex_unlock( &p_priv->var_lock ); 
    937945 
    938946    return VLC_SUCCESS; 
     
    950958    variable_t *p_var; 
    951959    vlc_value_t oldval; 
    952  
    953     vlc_mutex_lock( &p_this->var_lock ); 
     960    vlc_object_internals_t *p_priv = p_this->p_internals; 
     961 
     962    vlc_mutex_lock( &p_priv->var_lock ); 
    954963 
    955964    i_var = GetUnused( p_this, psz_name ); 
    956965    if( i_var < 0 ) 
    957966    { 
    958         vlc_mutex_unlock( &p_this->var_lock ); 
     967        vlc_mutex_unlock( &p_priv->var_lock ); 
    959968        return i_var; 
    960969    } 
    961970 
    962     p_var = &p_this->p_vars[i_var]; 
     971    p_var = &p_priv->p_vars[i_var]; 
    963972 
    964973    /* Backup needed stuff */ 
     
    974983 
    975984        p_var->b_incallback = VLC_TRUE; 
    976         vlc_mutex_unlock( &p_this->var_lock ); 
     985        vlc_mutex_unlock( &p_priv->var_lock ); 
    977986 
    978987        /* The real calls */ 
     
    983992        } 
    984993 
    985         vlc_mutex_lock( &p_this->var_lock ); 
    986  
    987         i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     994        vlc_mutex_lock( &p_priv->var_lock ); 
     995 
     996        i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    988997        if( i_var < 0 ) 
    989998        { 
    990999            msg_Err( p_this, "variable %s has disappeared", psz_name ); 
    991             vlc_mutex_unlock( &p_this->var_lock ); 
     1000            vlc_mutex_unlock( &p_priv->var_lock ); 
    9921001            return VLC_ENOVAR; 
    9931002        } 
    9941003 
    995         p_var = &p_this->p_vars[i_var]; 
     1004        p_var = &p_priv->p_vars[i_var]; 
    9961005        p_var->b_incallback = VLC_FALSE; 
    9971006    } 
    9981007 
    999     vlc_mutex_unlock( &p_this->var_lock ); 
     1008    vlc_mutex_unlock( &p_priv->var_lock ); 
    10001009    return VLC_SUCCESS; 
    10011010} 
     
    11421151{ 
    11431152    int i_var, i_tries = 0; 
     1153    vlc_object_internals_t *p_priv = p_this->p_internals; 
    11441154 
    11451155    while( VLC_TRUE ) 
    11461156    { 
    1147         i_var = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); 
     1157        i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    11481158        if( i_var < 0 ) 
    11491159        { 
     
    11511161        } 
    11521162 
    1153         if( ! p_this->p_vars[i_var].b_incallback ) 
     1163        if( ! p_priv->p_vars[i_var].b_incallback ) 
    11541164        { 
    11551165            return i_var; 
     
    11621172        } 
    11631173 
    1164         vlc_mutex_unlock( &p_this->var_lock ); 
     1174        vlc_mutex_unlock( &p_priv->var_lock ); 
    11651175        msleep( THREAD_SLEEP ); 
    1166         vlc_mutex_lock( &p_this->var_lock ); 
     1176        vlc_mutex_lock( &p_priv->var_lock ); 
    11671177    } 
    11681178} 
     
    14821492    } 
    14831493 
     1494    vlc_object_internals_t *p_priv = p_this->p_parent->p_internals; 
     1495 
    14841496    /* Look for the variable */ 
    1485     vlc_mutex_lock( &p_this->p_parent->var_lock ); 
    1486  
    1487     i_var = Lookup( p_this->p_parent->p_vars, p_this->p_parent->i_vars, 
    1488                     psz_name ); 
     1497    vlc_mutex_lock( &p_priv->var_lock ); 
     1498 
     1499    i_var = Lookup( p_priv->p_vars, p_priv->i_vars, psz_name ); 
    14891500 
    14901501    if( i_var >= 0 ) 
    14911502    { 
    14921503        /* We found it! */ 
    1493         p_var = &p_this->p_parent->p_vars[i_var]; 
     1504        p_var = &p_priv->p_vars[i_var]; 
    14941505 
    14951506        /* Really get the variable */ 
     
    14991510        p_var->pf_dup( p_val ); 
    15001511 
    1501         vlc_mutex_unlock( &p_this->p_parent->var_lock ); 
     1512        vlc_mutex_unlock( &p_priv->var_lock ); 
    15021513        return VLC_SUCCESS; 
    15031514    } 
    15041515 
    1505     vlc_mutex_unlock( &p_this->p_parent->var_lock ); 
     1516    vlc_mutex_unlock( &p_priv->var_lock ); 
    15061517 
    15071518    /* We're still not there */