Changeset 609a114637e858ff03123decde419019803f8b08
- 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
| r98cb4bf |
r609a114 |
|
| 563 | 563 | vlc_bool_t b_force; /**< set by the outside (eg. module_Need()) */ \ |
|---|
| 564 | 564 | \ |
|---|
| 565 | | /* Object variables */ \ |
|---|
| 566 | | vlc_mutex_t var_lock; \ |
|---|
| 567 | | int i_vars; \ |
|---|
| 568 | | variable_t * p_vars; \ |
|---|
| 569 | | \ |
|---|
| 570 | 565 | /* Stuff related to the libvlc structure */ \ |
|---|
| 571 | 566 | libvlc_int_t *p_libvlc; /**< (root of all evil) - 1 */ \ |
|---|
| r3ea2708 |
r609a114 |
|
| 83 | 83 | struct vlc_object_internals_t |
|---|
| 84 | 84 | { |
|---|
| | 85 | /* Object variables */ |
|---|
| | 86 | vlc_mutex_t var_lock; |
|---|
| | 87 | int i_vars; |
|---|
| | 88 | variable_t * p_vars; |
|---|
| | 89 | }; |
|---|
| 85 | 90 | |
|---|
| 86 | | }; |
|---|
| 87 | 91 | |
|---|
| 88 | 92 | static inline vlc_object_internals_t *vlc_internals( vlc_object_t *obj ) |
|---|
| r2e251e2 |
r609a114 |
|
| 126 | 126 | p_new->psz_header = NULL; |
|---|
| 127 | 127 | |
|---|
| 128 | | p_new->i_flags = 0; |
|---|
| 129 | 128 | if( p_this->i_flags & OBJECT_FLAGS_NODBG ) |
|---|
| 130 | 129 | p_new->i_flags |= OBJECT_FLAGS_NODBG; |
|---|
| … | … | |
| 134 | 133 | p_new->i_flags |= OBJECT_FLAGS_NOINTERACT; |
|---|
| 135 | 134 | |
|---|
| 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 ) |
|---|
| 140 | 138 | { |
|---|
| 141 | 139 | if( i_type != VLC_OBJECT_GLOBAL ) |
|---|
| … | … | |
| 187 | 185 | vlc_mutex_init( p_new, &p_new->object_lock ); |
|---|
| 188 | 186 | 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 ); |
|---|
| 190 | 188 | |
|---|
| 191 | 189 | if( i_type == VLC_OBJECT_GLOBAL ) |
|---|
| … | … | |
| 391 | 389 | /* Destroy the associated variables, starting from the end so that |
|---|
| 392 | 390 | * 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 ); |
|---|
| 400 | 398 | |
|---|
| 401 | 399 | if( p_this->psz_header ) free( p_this->psz_header ); |
|---|
| … | … | |
| 878 | 876 | PrintObject( p_object, "" ); |
|---|
| 879 | 877 | |
|---|
| 880 | | if( !p_object->i_vars ) |
|---|
| | 878 | if( !p_object->p_internals->i_vars ) |
|---|
| 881 | 879 | 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; |
|---|
| 885 | 883 | |
|---|
| 886 | 884 | const char *psz_type = "unknown"; |
|---|
| … | … | |
| 908 | 906 | } |
|---|
| 909 | 907 | printf( " %c-o \"%s\" (%s", |
|---|
| 910 | | i + 1 == p_object->i_vars ? '`' : '|', |
|---|
| | 908 | i + 1 == p_object->p_internals->i_vars ? '`' : '|', |
|---|
| 911 | 909 | p_var->psz_name, psz_type ); |
|---|
| 912 | 910 | if( p_var->psz_text ) |
|---|
| r3ea2708 |
r609a114 |
|
| 158 | 158 | variable_t *p_var; |
|---|
| 159 | 159 | 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 ); |
|---|
| 162 | 163 | |
|---|
| 163 | 164 | /* FIXME: if the variable already exists, we don't duplicate it. But we |
|---|
| … | … | |
| 165 | 166 | * time to rework Insert() so that only one lookup has to be done, feel |
|---|
| 166 | 167 | * 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 ); |
|---|
| 168 | 169 | |
|---|
| 169 | 170 | if( i_new >= 0 ) |
|---|
| 170 | 171 | { |
|---|
| 171 | 172 | /* 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 ); |
|---|
| 175 | 176 | return VLC_EBADVAR; |
|---|
| 176 | 177 | } |
|---|
| 177 | 178 | |
|---|
| 178 | | p_this->p_vars[i_new].i_usage++; |
|---|
| | 179 | p_priv->p_vars[i_new].i_usage++; |
|---|
| 179 | 180 | 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 ); |
|---|
| 182 | 183 | return VLC_SUCCESS; |
|---|
| 183 | 184 | } |
|---|
| 184 | 185 | |
|---|
| 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]; |
|---|
| 200 | 201 | memset( p_var, 0, sizeof(*p_var) ); |
|---|
| 201 | 202 | |
|---|
| … | … | |
| 302 | 303 | } |
|---|
| 303 | 304 | |
|---|
| 304 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 305 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 305 | 306 | |
|---|
| 306 | 307 | return VLC_SUCCESS; |
|---|
| … | … | |
| 320 | 321 | int i_var, i; |
|---|
| 321 | 322 | 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 ); |
|---|
| 324 | 326 | |
|---|
| 325 | 327 | i_var = GetUnused( p_this, psz_name ); |
|---|
| 326 | 328 | if( i_var < 0 ) |
|---|
| 327 | 329 | { |
|---|
| 328 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 330 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 329 | 331 | return i_var; |
|---|
| 330 | 332 | } |
|---|
| 331 | 333 | |
|---|
| 332 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 334 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 333 | 335 | |
|---|
| 334 | 336 | if( p_var->i_usage > 1 ) |
|---|
| 335 | 337 | { |
|---|
| 336 | 338 | p_var->i_usage--; |
|---|
| 337 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 339 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 338 | 340 | return VLC_SUCCESS; |
|---|
| 339 | 341 | } |
|---|
| … | … | |
| 364 | 366 | if( p_var->psz_text ) free( p_var->psz_text ); |
|---|
| 365 | 367 | |
|---|
| 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 ); |
|---|
| 379 | 381 | |
|---|
| 380 | 382 | return VLC_SUCCESS; |
|---|
| … | … | |
| 396 | 398 | variable_t *p_var; |
|---|
| 397 | 399 | 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 ); |
|---|
| 402 | 405 | |
|---|
| 403 | 406 | if( i_var < 0 ) |
|---|
| 404 | 407 | { |
|---|
| 405 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 408 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 406 | 409 | return VLC_ENOVAR; |
|---|
| 407 | 410 | } |
|---|
| 408 | 411 | |
|---|
| 409 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 412 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 410 | 413 | |
|---|
| 411 | 414 | switch( i_action ) |
|---|
| … | … | |
| 483 | 486 | { |
|---|
| 484 | 487 | /* Not found */ |
|---|
| 485 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 488 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 486 | 489 | return VLC_EGENERIC; |
|---|
| 487 | 490 | } |
|---|
| … | … | |
| 656 | 659 | |
|---|
| 657 | 660 | p_var->b_incallback = VLC_TRUE; |
|---|
| 658 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 661 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 659 | 662 | |
|---|
| 660 | 663 | /* The real calls */ |
|---|
| … | … | |
| 665 | 668 | } |
|---|
| 666 | 669 | |
|---|
| 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 ); |
|---|
| 670 | 673 | if( i_var < 0 ) |
|---|
| 671 | 674 | { |
|---|
| 672 | 675 | 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 ); |
|---|
| 674 | 677 | return VLC_ENOVAR; |
|---|
| 675 | 678 | } |
|---|
| 676 | 679 | |
|---|
| 677 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 680 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 678 | 681 | p_var->b_incallback = VLC_FALSE; |
|---|
| 679 | 682 | } |
|---|
| … | … | |
| 685 | 688 | } |
|---|
| 686 | 689 | |
|---|
| 687 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 690 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 688 | 691 | |
|---|
| 689 | 692 | return VLC_SUCCESS; |
|---|
| … | … | |
| 700 | 703 | { |
|---|
| 701 | 704 | 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 ); |
|---|
| 706 | 710 | |
|---|
| 707 | 711 | if( i_var < 0 ) |
|---|
| 708 | 712 | { |
|---|
| 709 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 713 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 710 | 714 | return 0; |
|---|
| 711 | 715 | } |
|---|
| 712 | 716 | |
|---|
| 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 ); |
|---|
| 716 | 720 | |
|---|
| 717 | 721 | return i_type; |
|---|
| … | … | |
| 730 | 734 | variable_t *p_var; |
|---|
| 731 | 735 | 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 ); |
|---|
| 734 | 739 | |
|---|
| 735 | 740 | i_var = GetUnused( p_this, psz_name ); |
|---|
| 736 | 741 | if( i_var < 0 ) |
|---|
| 737 | 742 | { |
|---|
| 738 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 743 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 739 | 744 | return i_var; |
|---|
| 740 | 745 | } |
|---|
| 741 | 746 | |
|---|
| 742 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 747 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 743 | 748 | |
|---|
| 744 | 749 | /* Duplicate data if needed */ |
|---|
| … | … | |
| 763 | 768 | |
|---|
| 764 | 769 | p_var->b_incallback = VLC_TRUE; |
|---|
| 765 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 770 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 766 | 771 | |
|---|
| 767 | 772 | /* The real calls */ |
|---|
| … | … | |
| 772 | 777 | } |
|---|
| 773 | 778 | |
|---|
| 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 ); |
|---|
| 777 | 782 | if( i_var < 0 ) |
|---|
| 778 | 783 | { |
|---|
| 779 | 784 | 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 ); |
|---|
| 781 | 786 | return VLC_ENOVAR; |
|---|
| 782 | 787 | } |
|---|
| 783 | 788 | |
|---|
| 784 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 789 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 785 | 790 | p_var->b_incallback = VLC_FALSE; |
|---|
| 786 | 791 | } |
|---|
| … | … | |
| 789 | 794 | p_var->pf_free( &oldval ); |
|---|
| 790 | 795 | |
|---|
| 791 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 796 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 792 | 797 | |
|---|
| 793 | 798 | return VLC_SUCCESS; |
|---|
| … | … | |
| 806 | 811 | int i_var; |
|---|
| 807 | 812 | 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 ); |
|---|
| 812 | 818 | |
|---|
| 813 | 819 | if( i_var < 0 ) |
|---|
| 814 | 820 | { |
|---|
| 815 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 821 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 816 | 822 | return VLC_ENOVAR; |
|---|
| 817 | 823 | } |
|---|
| 818 | 824 | |
|---|
| 819 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 825 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 820 | 826 | |
|---|
| 821 | 827 | /* Really get the variable */ |
|---|
| … | … | |
| 825 | 831 | p_var->pf_dup( p_val ); |
|---|
| 826 | 832 | |
|---|
| 827 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 833 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 828 | 834 | |
|---|
| 829 | 835 | return VLC_SUCCESS; |
|---|
| … | … | |
| 869 | 875 | variable_t *p_var; |
|---|
| 870 | 876 | callback_entry_t entry; |
|---|
| | 877 | vlc_object_internals_t *p_priv = p_this->p_internals; |
|---|
| 871 | 878 | |
|---|
| 872 | 879 | entry.pf_callback = pf_callback; |
|---|
| 873 | 880 | entry.p_data = p_data; |
|---|
| 874 | 881 | |
|---|
| 875 | | vlc_mutex_lock( &p_this->var_lock ); |
|---|
| | 882 | vlc_mutex_lock( &p_priv->var_lock ); |
|---|
| 876 | 883 | |
|---|
| 877 | 884 | i_var = GetUnused( p_this, psz_name ); |
|---|
| 878 | 885 | if( i_var < 0 ) |
|---|
| 879 | 886 | { |
|---|
| 880 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 887 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 881 | 888 | return i_var; |
|---|
| 882 | 889 | } |
|---|
| 883 | 890 | |
|---|
| 884 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 891 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 885 | 892 | |
|---|
| 886 | 893 | INSERT_ELEM( p_var->p_entries, |
|---|
| … | … | |
| 889 | 896 | entry ); |
|---|
| 890 | 897 | |
|---|
| 891 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 898 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 892 | 899 | |
|---|
| 893 | 900 | return VLC_SUCCESS; |
|---|
| … | … | |
| 905 | 912 | int i_entry, i_var; |
|---|
| 906 | 913 | 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 ); |
|---|
| 909 | 917 | |
|---|
| 910 | 918 | i_var = GetUnused( p_this, psz_name ); |
|---|
| 911 | 919 | if( i_var < 0 ) |
|---|
| 912 | 920 | { |
|---|
| 913 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 921 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 914 | 922 | return i_var; |
|---|
| 915 | 923 | } |
|---|
| 916 | 924 | |
|---|
| 917 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 925 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 918 | 926 | |
|---|
| 919 | 927 | for( i_entry = p_var->i_entries ; i_entry-- ; ) |
|---|
| … | … | |
| 928 | 936 | if( i_entry < 0 ) |
|---|
| 929 | 937 | { |
|---|
| 930 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 938 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 931 | 939 | return VLC_EGENERIC; |
|---|
| 932 | 940 | } |
|---|
| … | … | |
| 934 | 942 | REMOVE_ELEM( p_var->p_entries, p_var->i_entries, i_entry ); |
|---|
| 935 | 943 | |
|---|
| 936 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 944 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 937 | 945 | |
|---|
| 938 | 946 | return VLC_SUCCESS; |
|---|
| … | … | |
| 950 | 958 | variable_t *p_var; |
|---|
| 951 | 959 | 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 ); |
|---|
| 954 | 963 | |
|---|
| 955 | 964 | i_var = GetUnused( p_this, psz_name ); |
|---|
| 956 | 965 | if( i_var < 0 ) |
|---|
| 957 | 966 | { |
|---|
| 958 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 967 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 959 | 968 | return i_var; |
|---|
| 960 | 969 | } |
|---|
| 961 | 970 | |
|---|
| 962 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 971 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 963 | 972 | |
|---|
| 964 | 973 | /* Backup needed stuff */ |
|---|
| … | … | |
| 974 | 983 | |
|---|
| 975 | 984 | p_var->b_incallback = VLC_TRUE; |
|---|
| 976 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 985 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 977 | 986 | |
|---|
| 978 | 987 | /* The real calls */ |
|---|
| … | … | |
| 983 | 992 | } |
|---|
| 984 | 993 | |
|---|
| 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 ); |
|---|
| 988 | 997 | if( i_var < 0 ) |
|---|
| 989 | 998 | { |
|---|
| 990 | 999 | 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 ); |
|---|
| 992 | 1001 | return VLC_ENOVAR; |
|---|
| 993 | 1002 | } |
|---|
| 994 | 1003 | |
|---|
| 995 | | p_var = &p_this->p_vars[i_var]; |
|---|
| | 1004 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 996 | 1005 | p_var->b_incallback = VLC_FALSE; |
|---|
| 997 | 1006 | } |
|---|
| 998 | 1007 | |
|---|
| 999 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 1008 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 1000 | 1009 | return VLC_SUCCESS; |
|---|
| 1001 | 1010 | } |
|---|
| … | … | |
| 1142 | 1151 | { |
|---|
| 1143 | 1152 | int i_var, i_tries = 0; |
|---|
| | 1153 | vlc_object_internals_t *p_priv = p_this->p_internals; |
|---|
| 1144 | 1154 | |
|---|
| 1145 | 1155 | while( VLC_TRUE ) |
|---|
| 1146 | 1156 | { |
|---|
| 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 ); |
|---|
| 1148 | 1158 | if( i_var < 0 ) |
|---|
| 1149 | 1159 | { |
|---|
| … | … | |
| 1151 | 1161 | } |
|---|
| 1152 | 1162 | |
|---|
| 1153 | | if( ! p_this->p_vars[i_var].b_incallback ) |
|---|
| | 1163 | if( ! p_priv->p_vars[i_var].b_incallback ) |
|---|
| 1154 | 1164 | { |
|---|
| 1155 | 1165 | return i_var; |
|---|
| … | … | |
| 1162 | 1172 | } |
|---|
| 1163 | 1173 | |
|---|
| 1164 | | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 1174 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 1165 | 1175 | msleep( THREAD_SLEEP ); |
|---|
| 1166 | | vlc_mutex_lock( &p_this->var_lock ); |
|---|
| | 1176 | vlc_mutex_lock( &p_priv->var_lock ); |
|---|
| 1167 | 1177 | } |
|---|
| 1168 | 1178 | } |
|---|
| … | … | |
| 1482 | 1492 | } |
|---|
| 1483 | 1493 | |
|---|
| | 1494 | vlc_object_internals_t *p_priv = p_this->p_parent->p_internals; |
|---|
| | 1495 | |
|---|
| 1484 | 1496 | /* 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 ); |
|---|
| 1489 | 1500 | |
|---|
| 1490 | 1501 | if( i_var >= 0 ) |
|---|
| 1491 | 1502 | { |
|---|
| 1492 | 1503 | /* We found it! */ |
|---|
| 1493 | | p_var = &p_this->p_parent->p_vars[i_var]; |
|---|
| | 1504 | p_var = &p_priv->p_vars[i_var]; |
|---|
| 1494 | 1505 | |
|---|
| 1495 | 1506 | /* Really get the variable */ |
|---|
| … | … | |
| 1499 | 1510 | p_var->pf_dup( p_val ); |
|---|
| 1500 | 1511 | |
|---|
| 1501 | | vlc_mutex_unlock( &p_this->p_parent->var_lock ); |
|---|
| | 1512 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 1502 | 1513 | return VLC_SUCCESS; |
|---|
| 1503 | 1514 | } |
|---|
| 1504 | 1515 | |
|---|
| 1505 | | vlc_mutex_unlock( &p_this->p_parent->var_lock ); |
|---|
| | 1516 | vlc_mutex_unlock( &p_priv->var_lock ); |
|---|
| 1506 | 1517 | |
|---|
| 1507 | 1518 | /* We're still not there */ |
|---|