vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Sun Apr 8 18:25:37 2018 +0300| [7b2b46f7c6921a50d47a633f0d7e54b17343cd91] | committer: Rémi Denis-Courmont
modules: remove plug-in loaded flag The handle is nul when not loaded. There are no needs for a separate boolean. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7b2b46f7c6921a50d47a633f0d7e54b17343cd91 --- src/modules/bank.c | 22 ++++++++++------------ src/modules/entry.c | 5 ++--- src/modules/modules.h | 3 +-- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/modules/bank.c b/src/modules/bank.c index e7e0b9599c..c4f7546c7c 100644 --- a/src/modules/bank.c +++ b/src/modules/bank.c @@ -166,7 +166,7 @@ static vlc_plugin_t *module_InitStatic(vlc_plugin_cb entry) return NULL; #ifdef HAVE_DYNAMIC_PLUGINS - atomic_init(&lib->loaded, true); + atomic_init(&lib->handle, 1 /* must be non-zero for module_Map() */); lib->unloadable = false; #endif return lib; @@ -235,8 +235,7 @@ static vlc_plugin_t *module_InitDynamic(vlc_object_t *obj, const char *path, goto error; } - plugin->handle = handle; - atomic_init(&plugin->loaded, true); + atomic_init(&plugin->handle, (uintptr_t)handle); return plugin; error: vlc_dlclose(handle); @@ -498,7 +497,7 @@ int module_Map(vlc_object_t *obj, vlc_plugin_t *plugin) { static vlc_mutex_t lock = VLC_STATIC_MUTEX; - if (atomic_load_explicit(&plugin->loaded, memory_order_acquire)) + if (atomic_load_explicit(&plugin->handle, memory_order_acquire)) return 0; /* fast path: already loaded */ /* Try to load the plug-in (without locks, so read-only) */ @@ -523,7 +522,7 @@ int module_Map(vlc_object_t *obj, vlc_plugin_t *plugin) } vlc_mutex_lock(&lock); - if (!atomic_load_explicit(&plugin->loaded, memory_order_relaxed)) + if (atomic_load_explicit(&plugin->handle, memory_order_relaxed) == 0) { /* Lock is held, update the plug-in structure */ if (vlc_plugin_resolve(plugin, entry)) { @@ -531,8 +530,8 @@ int module_Map(vlc_object_t *obj, vlc_plugin_t *plugin) return -1; } - plugin->handle = handle; - atomic_store_explicit(&plugin->loaded, true, memory_order_release); + atomic_store_explicit(&plugin->handle, (uintptr_t)handle, + memory_order_release); } else /* Another thread won the race to load the plugin */ vlc_dlclose(handle); @@ -551,12 +550,11 @@ static void module_Unmap(vlc_plugin_t *plugin) { if (!plugin->unloadable) return; - if (!atomic_exchange_explicit(&plugin->loaded, false, - memory_order_acquire)) - return; - assert(plugin->handle != NULL); - vlc_dlclose(plugin->handle); + void *handle = (void *)atomic_exchange_explicit(&plugin->handle, 0, + memory_order_acquire); + if (handle != NULL) + vlc_dlclose(handle); } #else int module_Map(vlc_object_t *obj, vlc_plugin_t *plugin) diff --git a/src/modules/entry.c b/src/modules/entry.c index 5df86f6710..31fa64c2ce 100644 --- a/src/modules/entry.c +++ b/src/modules/entry.c @@ -105,9 +105,8 @@ vlc_plugin_t *vlc_plugin_create(void) plugin->conf.booleans = 0; #ifdef HAVE_DYNAMIC_PLUGINS plugin->abspath = NULL; - atomic_init(&plugin->loaded, false); plugin->unloadable = true; - plugin->handle = NULL; + atomic_init(&plugin->handle, 0); plugin->abspath = NULL; plugin->path = NULL; #endif @@ -125,7 +124,7 @@ void vlc_plugin_destroy(vlc_plugin_t *plugin) { assert(plugin != NULL); #ifdef HAVE_DYNAMIC_PLUGINS - assert(!plugin->unloadable || !atomic_load(&plugin->loaded)); + assert(!plugin->unloadable || atomic_load(&plugin->handle) == 0); #endif if (plugin->module != NULL) diff --git a/src/modules/modules.h b/src/modules/modules.h index 8f7ae97e97..885789a149 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -47,9 +47,8 @@ typedef struct vlc_plugin_t } conf; #ifdef HAVE_DYNAMIC_PLUGINS - atomic_bool loaded; /**< Whether the plug-in is mapped in memory */ bool unloadable; /**< Whether the plug-in can be unloaded safely */ - void *handle; /**< Run-time linker handle (if loaded) */ + atomic_uintptr_t handle; /**< Run-time linker handle (or nul) */ char *abspath; /**< Absolute path */ char *path; /**< Relative path (within plug-in directory) */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits