Changeset ace8caefad8be422bc4b478d4c8b2474189801f0
- Timestamp:
- 22/06/08 14:30:30
(6 months ago)
- Author:
- Rémi Denis-Courmont <rdenis@simphalempin.com>
- git-committer:
- Rémi Denis-Courmont <rdenis@simphalempin.com> 1214137830 +0300
- git-parent:
[6c790747f3847ae2c88a03d6a053968143ad76e6]
- git-author:
- Rémi Denis-Courmont <rdenis@simphalempin.com> 1214137830 +0300
- Message:
LibVLC: wait until all threads are terminated
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r57c3ecd |
race8cae |
|
| 198 | 198 | vlc_mutex_init( &priv->config_lock ); |
|---|
| 199 | 199 | |
|---|
| | 200 | priv->threads_count = 0; |
|---|
| | 201 | vlc_mutex_init (&priv->threads_lock); |
|---|
| | 202 | vlc_cond_init (NULL, &priv->threads_wait); |
|---|
| | 203 | |
|---|
| 200 | 204 | /* Store data for the non-reentrant API */ |
|---|
| 201 | 205 | p_static_vlc = p_libvlc; |
|---|
| … | … | |
| 987 | 991 | #endif |
|---|
| 988 | 992 | |
|---|
| | 993 | /* Make sure all threads are completed before we start looking for |
|---|
| | 994 | * reference leaks and deinitializing core LibVLC subsytems. */ |
|---|
| | 995 | vlc_mutex_lock (&priv->threads_lock); |
|---|
| | 996 | while (priv->threads_count) |
|---|
| | 997 | { |
|---|
| | 998 | msg_Dbg (p_libvlc, "waiting for %u remaining threads", |
|---|
| | 999 | priv->threads_count); |
|---|
| | 1000 | vlc_cond_wait (&priv->threads_wait, &priv->threads_lock); |
|---|
| | 1001 | } |
|---|
| | 1002 | vlc_mutex_unlock (&priv->threads_lock); |
|---|
| | 1003 | |
|---|
| 989 | 1004 | bool b_clean = true; |
|---|
| 990 | 1005 | FOREACH_ARRAY( input_item_t *p_del, priv->input_items ) |
|---|
| … | … | |
| 1067 | 1082 | vlc_mutex_destroy( &priv->config_lock ); |
|---|
| 1068 | 1083 | vlc_mutex_destroy( &priv->timer_lock ); |
|---|
| | 1084 | vlc_cond_destroy (&priv->threads_wait); |
|---|
| | 1085 | vlc_mutex_destroy (&priv->threads_lock); |
|---|
| 1069 | 1086 | |
|---|
| 1070 | 1087 | if( b_release ) vlc_object_release( p_libvlc ); |
|---|
| r5277e0f |
race8cae |
|
| 245 | 245 | /// (needs cleanup) |
|---|
| 246 | 246 | |
|---|
| | 247 | /* Singleton objects */ |
|---|
| 247 | 248 | module_t *p_memcpy_module; ///< Fast memcpy plugin used |
|---|
| 248 | 249 | playlist_t *p_playlist; //< the playlist singleton |
|---|
| … | … | |
| 253 | 254 | /* Private playlist data (FIXME - playlist_t is too public...) */ |
|---|
| 254 | 255 | sout_instance_t *p_sout; ///< kept sout instance (for playlist) |
|---|
| | 256 | |
|---|
| | 257 | /* Thread support */ |
|---|
| | 258 | unsigned threads_count; |
|---|
| | 259 | vlc_mutex_t threads_lock; |
|---|
| | 260 | vlc_cond_t threads_wait; |
|---|
| 255 | 261 | } libvlc_priv_t; |
|---|
| 256 | 262 | |
|---|
| r7e413aa |
race8cae |
|
| 468 | 468 | func (obj); |
|---|
| 469 | 469 | msg_Dbg (obj, "thread ended"); |
|---|
| | 470 | |
|---|
| | 471 | libvlc_priv_t *libpriv = libvlc_priv (obj->p_libvlc); |
|---|
| | 472 | vlc_mutex_lock (&libpriv->threads_lock); |
|---|
| | 473 | if (--libpriv->threads_count == 0) |
|---|
| | 474 | vlc_cond_signal (&libpriv->threads_wait); |
|---|
| | 475 | vlc_mutex_unlock (&libpriv->threads_lock); |
|---|
| 470 | 476 | return THREAD_RVAL; |
|---|
| 471 | 477 | } |
|---|
| … | … | |
| 483 | 489 | int i_ret; |
|---|
| 484 | 490 | vlc_object_internals_t *p_priv = vlc_internals( p_this ); |
|---|
| | 491 | libvlc_priv_t *libpriv = libvlc_priv (p_this->p_libvlc); |
|---|
| 485 | 492 | |
|---|
| 486 | 493 | struct vlc_thread_boot *boot = malloc (sizeof (*boot)); |
|---|
| … | … | |
| 489 | 496 | boot->entry = func; |
|---|
| 490 | 497 | boot->object = p_this; |
|---|
| | 498 | |
|---|
| | 499 | vlc_mutex_lock (&libpriv->threads_lock); |
|---|
| | 500 | libpriv->threads_count++; |
|---|
| | 501 | vlc_mutex_unlock (&libpriv->threads_lock); |
|---|
| 491 | 502 | |
|---|
| 492 | 503 | vlc_object_lock( p_this ); |
|---|
| … | … | |
| 597 | 608 | |
|---|
| 598 | 609 | vlc_object_unlock( p_this ); |
|---|
| | 610 | |
|---|
| | 611 | if (i_ret) |
|---|
| | 612 | { |
|---|
| | 613 | vlc_mutex_lock (&libpriv->threads_lock); |
|---|
| | 614 | if (--libpriv->threads_count == 0) |
|---|
| | 615 | vlc_cond_signal (&libpriv->threads_wait); |
|---|
| | 616 | vlc_mutex_unlock (&libpriv->threads_lock); |
|---|
| | 617 | } |
|---|
| 599 | 618 | return i_ret; |
|---|
| 600 | 619 | } |
|---|