Changeset 2f27884905b95e2480c90b1c98e5322ed08fee6b
- Timestamp:
- 14/10/02 21:04:51
(6 years ago)
- Author:
- Sam Hocevar <sam@videolan.org>
- git-committer:
- Sam Hocevar <sam@videolan.org> 1034622291 +0000
- git-parent:
[bf7985b74afcef9103b35a3c47eeae5845ae681b]
- git-author:
- Sam Hocevar <sam@videolan.org> 1034622291 +0000
- Message:
- ./modules/misc/testsuite/test4.c: made the 4th test less CPU intensive
by making the spawned threads wait a bit longer.
- ./src/misc/variables.c: added a usage count to the variables; trying to
create a variable with the same name only increments its refcount.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| rbf7985b |
r2f27884 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2002 VideoLAN |
|---|
| 5 | | * $Id: variables.h,v 1.2 2002/10/14 16:46:55 sam Exp $ |
|---|
| | 5 | * $Id: variables.h,v 1.3 2002/10/14 19:04:51 sam Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Samuel Hocevar <sam@zoy.org> |
|---|
| … | … | |
| 32 | 32 | #define VLC_VAR_ADDRESS 0x0600 |
|---|
| 33 | 33 | #define VLC_VAR_COMMAND 0x0700 |
|---|
| | 34 | #define VLC_VAR_MUTEX 0x0800 |
|---|
| 34 | 35 | |
|---|
| 35 | 36 | /***************************************************************************** |
|---|
| … | … | |
| 46 | 47 | |
|---|
| 47 | 48 | /* Lots of other things that can be added */ |
|---|
| | 49 | int i_usage; |
|---|
| 48 | 50 | vlc_bool_t b_set; |
|---|
| 49 | 51 | vlc_bool_t b_active; |
|---|
| r112187e |
r2f27884 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2002 VideoLAN |
|---|
| 5 | | * $Id: test4.c,v 1.1 2002/10/14 16:34:17 sam Exp $ |
|---|
| | 5 | * $Id: test4.c,v 1.2 2002/10/14 19:04:51 sam Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Samuel Hocevar <sam@zoy.org> |
|---|
| … | … | |
| 229 | 229 | while( !p_this->b_die ) |
|---|
| 230 | 230 | { |
|---|
| 231 | | msleep( 1000 ); |
|---|
| | 231 | msleep( 10000 ); |
|---|
| 232 | 232 | } |
|---|
| 233 | 233 | |
|---|
| rbf7985b |
r2f27884 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2002 VideoLAN |
|---|
| 5 | | * $Id: variables.c,v 1.2 2002/10/14 16:46:56 sam Exp $ |
|---|
| | 5 | * $Id: variables.c,v 1.3 2002/10/14 19:04:51 sam Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Samuel Hocevar <sam@zoy.org> |
|---|
| … | … | |
| 50 | 50 | { |
|---|
| 51 | 51 | int i_new; |
|---|
| | 52 | variable_t *p_var; |
|---|
| 52 | 53 | |
|---|
| 53 | 54 | vlc_mutex_lock( &p_this->var_lock ); |
|---|
| | 55 | |
|---|
| | 56 | /* FIXME: if the variable already exists, we don't duplicate it. But we |
|---|
| | 57 | * duplicate the lookups. It's not that serious, but if anyone finds some |
|---|
| | 58 | * time to rework Insert() so that only one lookup has to be done, feel |
|---|
| | 59 | * free to do so. */ |
|---|
| | 60 | i_new = Lookup( p_this->p_vars, p_this->i_vars, psz_name ); |
|---|
| | 61 | |
|---|
| | 62 | if( i_new >= 0 ) |
|---|
| | 63 | { |
|---|
| | 64 | /* If the types differ, variable creation failed. */ |
|---|
| | 65 | if( i_type != p_this->p_vars[i_new].i_type ) |
|---|
| | 66 | { |
|---|
| | 67 | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 68 | return VLC_EBADVAR; |
|---|
| | 69 | } |
|---|
| | 70 | |
|---|
| | 71 | p_this->p_vars[i_new].i_usage++; |
|---|
| | 72 | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 73 | return VLC_SUCCESS; |
|---|
| | 74 | } |
|---|
| | 75 | |
|---|
| | 76 | i_new = Insert( p_this->p_vars, p_this->i_vars, psz_name ); |
|---|
| 54 | 77 | |
|---|
| 55 | 78 | if( (p_this->i_vars & 15) == 15 ) |
|---|
| … | … | |
| 58 | 81 | (p_this->i_vars+17) * sizeof(variable_t) ); |
|---|
| 59 | 82 | } |
|---|
| 60 | | |
|---|
| 61 | | i_new = Insert( p_this->p_vars, p_this->i_vars, psz_name ); |
|---|
| 62 | 83 | |
|---|
| 63 | 84 | memmove( p_this->p_vars + i_new + 1, |
|---|
| … | … | |
| 65 | 86 | (p_this->i_vars - i_new) * sizeof(variable_t) ); |
|---|
| 66 | 87 | |
|---|
| 67 | | p_this->p_vars[i_new].i_hash = HashString( psz_name ); |
|---|
| 68 | | p_this->p_vars[i_new].psz_name = strdup( psz_name ); |
|---|
| 69 | | |
|---|
| 70 | | p_this->p_vars[i_new].i_type = i_type; |
|---|
| 71 | | memset( &p_this->p_vars[i_new].val, 0, sizeof(vlc_value_t) ); |
|---|
| 72 | | |
|---|
| 73 | | p_this->p_vars[i_new].b_set = VLC_FALSE; |
|---|
| 74 | | p_this->p_vars[i_new].b_active = VLC_TRUE; |
|---|
| | 88 | p_var = &p_this->p_vars[i_new]; |
|---|
| | 89 | |
|---|
| | 90 | p_var->i_hash = HashString( psz_name ); |
|---|
| | 91 | p_var->psz_name = strdup( psz_name ); |
|---|
| | 92 | |
|---|
| | 93 | p_var->i_type = i_type; |
|---|
| | 94 | memset( &p_var->val, 0, sizeof(vlc_value_t) ); |
|---|
| | 95 | |
|---|
| | 96 | p_var->i_usage = 1; |
|---|
| | 97 | p_var->b_set = VLC_FALSE; |
|---|
| | 98 | p_var->b_active = VLC_TRUE; |
|---|
| 75 | 99 | |
|---|
| 76 | 100 | p_this->i_vars++; |
|---|
| … | … | |
| 90 | 114 | { |
|---|
| 91 | 115 | int i_del; |
|---|
| | 116 | variable_t *p_var; |
|---|
| 92 | 117 | |
|---|
| 93 | 118 | vlc_mutex_lock( &p_this->var_lock ); |
|---|
| … | … | |
| 102 | 127 | } |
|---|
| 103 | 128 | |
|---|
| | 129 | p_var = &p_this->p_vars[i_del]; |
|---|
| | 130 | |
|---|
| | 131 | if( p_var->i_usage > 1 ) |
|---|
| | 132 | { |
|---|
| | 133 | p_var->i_usage--; |
|---|
| | 134 | vlc_mutex_unlock( &p_this->var_lock ); |
|---|
| | 135 | return VLC_SUCCESS; |
|---|
| | 136 | } |
|---|
| | 137 | |
|---|
| 104 | 138 | /* Free value if needed */ |
|---|
| 105 | | switch( p_this->p_vars[i_del].i_type ) |
|---|
| | 139 | switch( p_var->i_type ) |
|---|
| 106 | 140 | { |
|---|
| 107 | 141 | case VLC_VAR_STRING: |
|---|
| 108 | 142 | case VLC_VAR_MODULE: |
|---|
| 109 | 143 | case VLC_VAR_FILE: |
|---|
| 110 | | if( p_this->p_vars[i_del].b_set |
|---|
| 111 | | && p_this->p_vars[i_del].val.psz_string ) |
|---|
| | 144 | if( p_var->b_set && p_var->val.psz_string ) |
|---|
| 112 | 145 | { |
|---|
| 113 | | free( p_this->p_vars[i_del].val.psz_string ); |
|---|
| | 146 | free( p_var->val.psz_string ); |
|---|
| 114 | 147 | } |
|---|
| 115 | 148 | break; |
|---|
| 116 | 149 | } |
|---|
| 117 | 150 | |
|---|
| 118 | | free( p_this->p_vars[i_del].psz_name ); |
|---|
| | 151 | free( p_var->psz_name ); |
|---|
| 119 | 152 | |
|---|
| 120 | 153 | memmove( p_this->p_vars + i_del, |
|---|