vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Nov 23 23:36:17 2010 +0200| [ae79d25dac4e2067530dd375369ddc08c39900ed] | committer: Rémi Denis-Courmont
Win32: implement variable cleanup more similar to POSIX... ...and less prone to deadlocks. This restarts until all keys are NULL, in case cleaning up reset one key back to a non-NULL value. There is still a slight difference with POSIX still. POSIX will restarts only after all destructors have been invoked, not after the first one. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ae79d25dac4e2067530dd375369ddc08c39900ed --- src/win32/thread.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/src/win32/thread.c b/src/win32/thread.c index 8552ea7..9bcc645 100644 --- a/src/win32/thread.c +++ b/src/win32/thread.c @@ -517,13 +517,19 @@ static void vlc_threadvar_cleanup (void) { vlc_threadvar_t key; +retry: /* TODO: use RW lock or something similar */ vlc_mutex_lock (&super_mutex); for (key = vlc_threadvar_last; key != NULL; key = key->prev) { void *value = vlc_threadvar_get (key); if (value != NULL) + { + vlc_mutex_unlock (&super_mutex); + vlc_threadvar_set (key, NULL); key->destroy (value); + goto retry; + } } vlc_mutex_unlock (&super_mutex); } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
