Changeset 5f9f9ea47f81cfa7350e2930495602cc1137b2d7
- Timestamp:
- 17/08/07 04:15:59
(1 year ago)
- Author:
- Pierre d'Herbemont <pdherbemont@videolan.org>
- git-committer:
- Pierre d'Herbemont <pdherbemont@videolan.org> 1187316959 +0000
- git-parent:
[6e3263c3d6fe0e9bfed279f8e10fca0d20df10a6]
- git-author:
- Pierre d'Herbemont <pdherbemont@videolan.org> 1187316959 +0000
- Message:
misc/events.c: Avoid a couple of warning and move the calling back out of the lock.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r5d963f0 |
r5f9f9ea |
|
| 65 | 65 | /** |
|---|
| 66 | 66 | * Initialize event manager object |
|---|
| 67 | | * p_this is the object that contains the event manager. But not |
|---|
| | 67 | * p_obj is the object that contains the event manager. But not |
|---|
| 68 | 68 | * necessarily a vlc_object_t (an input_item_t is not a vlc_object_t |
|---|
| 69 | 69 | * for instance). |
|---|
| 70 | | */ |
|---|
| 71 | | int vlc_event_manager_init( vlc_event_manager_t * p_em, void * p_obj ) |
|---|
| | 70 | * p_parent_obj gives a libvlc instance |
|---|
| | 71 | */ |
|---|
| | 72 | int vlc_event_manager_init( vlc_event_manager_t * p_em, void * p_obj, |
|---|
| | 73 | vlc_object_t * p_parent_obj ) |
|---|
| 72 | 74 | { |
|---|
| 73 | 75 | p_em->p_obj = p_obj; |
|---|
| | 76 | vlc_mutex_init( p_parent_obj, &p_em->object_lock ); |
|---|
| 74 | 77 | ARRAY_INIT( p_em->listeners_groups ); |
|---|
| 75 | 78 | return VLC_SUCCESS; |
|---|
| … | … | |
| 83 | 86 | struct vlc_event_listeners_group_t * listeners_group; |
|---|
| 84 | 87 | struct vlc_event_listener_t * listener; |
|---|
| | 88 | |
|---|
| | 89 | vlc_mutex_destroy( &p_em->object_lock ); |
|---|
| 85 | 90 | |
|---|
| 86 | 91 | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| … | … | |
| 107 | 112 | listeners_group->event_type = event_type; |
|---|
| 108 | 113 | ARRAY_INIT( listeners_group->listeners ); |
|---|
| 109 | | |
|---|
| | 114 | |
|---|
| | 115 | vlc_mutex_lock( &p_em->object_lock ); |
|---|
| 110 | 116 | ARRAY_APPEND( p_em->listeners_groups, listeners_group ); |
|---|
| | 117 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| 111 | 118 | |
|---|
| 112 | 119 | return VLC_SUCCESS; |
|---|
| … | … | |
| 121 | 128 | vlc_event_listeners_group_t * listeners_group; |
|---|
| 122 | 129 | vlc_event_listener_t * listener; |
|---|
| | 130 | vlc_event_callback_t func; |
|---|
| | 131 | void * user_data; |
|---|
| 123 | 132 | |
|---|
| 124 | 133 | /* Fill event with the sending object now */ |
|---|
| 125 | 134 | p_event->p_obj = p_em->p_obj; |
|---|
| 126 | 135 | |
|---|
| | 136 | vlc_mutex_lock( &p_em->object_lock ); |
|---|
| 127 | 137 | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| 128 | 138 | if( listeners_group->event_type == p_event->type ) |
|---|
| … | … | |
| 130 | 140 | /* We found the group, now send every one the event */ |
|---|
| 131 | 141 | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| 132 | | listener->pf_callback( p_event, listener->p_user_data ); |
|---|
| | 142 | func = listener->pf_callback; |
|---|
| | 143 | user_data = listener->p_user_data; |
|---|
| 133 | 144 | FOREACH_END() |
|---|
| 134 | 145 | break; |
|---|
| 135 | 146 | } |
|---|
| 136 | 147 | FOREACH_END() |
|---|
| | 148 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| | 149 | |
|---|
| | 150 | func( p_event, user_data ); |
|---|
| 137 | 151 | } |
|---|
| 138 | 152 | |
|---|
| … | … | |
| 140 | 154 | * Add a callback for an event. |
|---|
| 141 | 155 | */ |
|---|
| 142 | | int vlc_event_attach( vlc_event_manager_t * p_event_manager, |
|---|
| | 156 | int vlc_event_attach( vlc_event_manager_t * p_em, |
|---|
| 143 | 157 | vlc_event_type_t event_type, |
|---|
| 144 | 158 | vlc_event_callback_t pf_callback, |
|---|
| … | … | |
| 153 | 167 | listener->p_user_data = p_user_data; |
|---|
| 154 | 168 | listener->pf_callback = pf_callback; |
|---|
| 155 | | |
|---|
| 156 | | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| | 169 | |
|---|
| | 170 | vlc_mutex_lock( &p_em->object_lock ); |
|---|
| | 171 | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| 157 | 172 | if( listeners_group->event_type == event_type ) |
|---|
| 158 | 173 | { |
|---|
| 159 | 174 | ARRAY_APPEND( listeners_group->listeners, listener ); |
|---|
| | 175 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| 160 | 176 | return VLC_SUCCESS; |
|---|
| 161 | 177 | } |
|---|
| 162 | 178 | FOREACH_END() |
|---|
| 163 | | |
|---|
| | 179 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| | 180 | |
|---|
| 164 | 181 | free(listener); |
|---|
| 165 | 182 | return VLC_EGENERIC; |
|---|
| … | … | |
| 169 | 186 | * Remove a callback for an event. |
|---|
| 170 | 187 | */ |
|---|
| 171 | | int vlc_event_detach( vlc_event_manager_t *p_event_manager, |
|---|
| | 188 | int vlc_event_detach( vlc_event_manager_t *p_em, |
|---|
| 172 | 189 | vlc_event_type_t event_type, |
|---|
| 173 | 190 | vlc_event_callback_t pf_callback, |
|---|
| … | … | |
| 176 | 193 | vlc_event_listeners_group_t * listeners_group; |
|---|
| 177 | 194 | struct vlc_event_listener_t * listener; |
|---|
| 178 | | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| | 195 | |
|---|
| | 196 | vlc_mutex_lock( &p_em->object_lock ); |
|---|
| | 197 | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| 179 | 198 | if( listeners_group->event_type == event_type ) |
|---|
| 180 | 199 | { |
|---|
| … | … | |
| 184 | 203 | { |
|---|
| 185 | 204 | /* that's our listener */ |
|---|
| 186 | | free( listener ); |
|---|
| 187 | 205 | ARRAY_REMOVE( listeners_group->listeners, |
|---|
| 188 | 206 | fe_idx /* This comes from the macro (and that's why |
|---|
| 189 | 207 | I hate macro) */ ); |
|---|
| | 208 | free( listener ); |
|---|
| | 209 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| 190 | 210 | return VLC_SUCCESS; |
|---|
| 191 | 211 | } |
|---|
| … | … | |
| 193 | 213 | } |
|---|
| 194 | 214 | FOREACH_END() |
|---|
| | 215 | vlc_mutex_unlock( &p_em->object_lock ); |
|---|
| 195 | 216 | |
|---|
| 196 | 217 | return VLC_EGENERIC; |
|---|