From 169715ef3e057ba83db5307c799e5b8543cc5d46 Mon Sep 17 00:00:00 2001 From: Michael Roitzsch Date: Tue, 8 Jun 2004 20:44:27 +0000 Subject: a better approach to the module unload prevention (when this works in OSX, we can remove the PLUGIN_NO_UNLOAD flag from video_out_macosx.m, but the support for this in the plugin loader seems to be a good idea anyway) CVS patchset: 6661 CVS date: 2004/06/08 20:44:27 --- src/xine-engine/load_plugins.c | 11 +++++------ src/xine-engine/xine_plugin.h | 11 ++++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src/xine-engine') diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c index b7db9fc85..0a73283a7 100644 --- a/src/xine-engine/load_plugins.c +++ b/src/xine-engine/load_plugins.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: load_plugins.c,v 1.177 2004/06/05 16:06:13 jcdutton Exp $ + * $Id: load_plugins.c,v 1.178 2004/06/08 20:44:27 mroi Exp $ * * * Load input/demux/audio_out/video_out/codec plugins @@ -511,6 +511,7 @@ static void collect_plugins(xine_t *this, char *path){ _("load_plugins: cannot open plugin lib %s:\n%s\n"), str, error); } else { + int do_not_unload = 0; if (info || (info = dlsym(lib, "xine_plugin_info"))) { @@ -569,6 +570,7 @@ static void collect_plugins(xine_t *this, char *path){ /* get next info either from lib or cache */ if( lib ) { info++; + do_not_unload = (do_not_unload || (info->type & PLUGIN_NO_UNLOAD)); } else { info = _get_cached_plugin ( this->plugin_catalog->cache, @@ -582,11 +584,8 @@ static void collect_plugins(xine_t *this, char *path){ xine_log (this, XINE_LOG_PLUGIN, _("load_plugins: can't get plugin info from %s:\n%s\n"), str, error); } - if( lib ) -#ifdef HOST_OS_DARWIN - if (dlsym (lib, "plugin_contains_objc_code") == NULL) -#endif - dlclose(lib); + if( lib && !do_not_unload ) + dlclose(lib); } break; case S_IFDIR: diff --git a/src/xine-engine/xine_plugin.h b/src/xine-engine/xine_plugin.h index 87662595f..5ed84c6c0 100644 --- a/src/xine-engine/xine_plugin.h +++ b/src/xine-engine/xine_plugin.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_plugin.h,v 1.13 2004/05/16 17:58:16 tmattern Exp $ + * $Id: xine_plugin.h,v 1.14 2004/06/08 20:44:27 mroi Exp $ * * generic plugin definitions * @@ -39,9 +39,14 @@ /* this flag may be or'ed with type in order to force preloading the plugin. * very useful to register config items on xine initialization. */ -#define PLUGIN_MUST_PRELOAD 128 +#define PLUGIN_MUST_PRELOAD (1 << 7) -#define PLUGIN_TYPE_MASK 127 +/* this flag may be or'ed with type to prevent the plugin loader from unloading + * the plugin + */ +#define PLUGIN_NO_UNLOAD (1 << 8) + +#define PLUGIN_TYPE_MASK ((1 << 7) - 1) typedef struct { uint8_t type; /* one of the PLUGIN_* constants above */ -- cgit v1.2.3