$OpenBSD: patch-xmms_pluginenum_c,v 1.3 2001/07/25 16:05:19 naddy Exp $
--- xmms/pluginenum.c.orig	Mon Oct 16 15:37:56 2000
+++ xmms/pluginenum.c	Wed Jul 25 16:47:43 2001
@@ -33,6 +33,19 @@
 # define RTLD_NOW 0
 #endif
 
+#ifdef WITH_SYMBOL_UNDERSCORE
+# define IPLUGIN_SYM "_get_iplugin_info"
+# define OPLUGIN_SYM "_get_oplugin_info"
+# define EPLUGIN_SYM "_get_eplugin_info"
+# define GPLUGIN_SYM "_get_gplugin_info"
+# define VPLUGIN_SYM "_get_vplugin_info"
+#else
+# define IPLUGIN_SYM "get_iplugin_info"
+# define OPLUGIN_SYM "get_oplugin_info"
+# define EPLUGIN_SYM "get_eplugin_info"
+# define GPLUGIN_SYM "get_gplugin_info"
+# define VPLUGIN_SYM "get_vplugin_info"
+#endif
 
 gchar *plugin_dir_list[] =
 {
@@ -264,9 +277,9 @@ void add_plugin(gchar * filename)
 #endif /* HPUX */
 	{
 #ifdef HPUX
- 		if ((shl_findsym(&h, "get_iplugin_info", TYPE_PROCEDURE, (void*) &gpi)) == 0)
+ 		if ((shl_findsym(&h, IPLUGIN_SYM, TYPE_PROCEDURE, (void*) &gpi)) == 0)
 #else
-		if ((gpi = dlsym(h, "get_iplugin_info")) != NULL)
+		if ((gpi = dlsym(h, IPLUGIN_SYM)) != NULL)
 #endif
 		{
 			InputPlugin *p;
@@ -282,9 +295,9 @@ void add_plugin(gchar * filename)
 			ip_data->input_list = g_list_prepend(ip_data->input_list, p);
 		}
 #ifdef HPUX
-		else if ((shl_findsym(&h, "get_oplugin_info", TYPE_PROCEDURE, (void*) &gpi)) == 0)
+		else if ((shl_findsym(&h, OPLUGIN_SYM, TYPE_PROCEDURE, (void*) &gpi)) == 0)
 #else
-		else if ((gpi = dlsym(h, "get_oplugin_info")) != NULL)
+		else if ((gpi = dlsym(h, OPLUGIN_SYM)) != NULL)
 #endif
 		{
 			OutputPlugin *p;
@@ -295,9 +308,9 @@ void add_plugin(gchar * filename)
 			op_data->output_list = g_list_prepend(op_data->output_list, p);
 		}
 #ifdef HPUX
-		else if ((shl_findsym(&h, "get_eplugin_info", TYPE_PROCEDURE, (void *) &gpi)) == 0)
+		else if ((shl_findsym(&h, EPLUGIN_SYM, TYPE_PROCEDURE, (void *) &gpi)) == 0)
 #else
-		else if ((gpi = dlsym(h, "get_eplugin_info")) != NULL)
+		else if ((gpi = dlsym(h, EPLUGIN_SYM)) != NULL)
 #endif
 		{
 			EffectPlugin *p;
@@ -308,9 +321,9 @@ void add_plugin(gchar * filename)
 			ep_data->effect_list = g_list_prepend(ep_data->effect_list, p);
 		}
 #ifdef HPUX
-		else if ((shl_findsym(&h, "get_gplugin_info", TYPE_PROCEDURE, (void*) &gpi)) == 0)
+		else if ((shl_findsym(&h, GPLUGIN_SYM, TYPE_PROCEDURE, (void*) &gpi)) == 0)
 #else
-		else if ((gpi = dlsym(h, "get_gplugin_info")) != NULL)
+		else if ((gpi = dlsym(h, GPLUGIN_SYM)) != NULL)
 #endif 
 		{
 			GeneralPlugin *p;
@@ -322,9 +335,9 @@ void add_plugin(gchar * filename)
 			gp_data->general_list = g_list_prepend(gp_data->general_list, p);
 		}
 #ifdef HPUX
-		else if ((shl_findsym(&h, "get_vplugin_info", TYPE_PROCEDURE, (void *) &gpi)) == 0)
+		else if ((shl_findsym(&h, VPLUGIN_SYM, TYPE_PROCEDURE, (void *) &gpi)) == 0)
 #else
-		else if ((gpi = dlsym(h, "get_vplugin_info")) != NULL)
+		else if ((gpi = dlsym(h, VPLUGIN_SYM)) != NULL)
 #endif
 		{
 			VisPlugin *p;
@@ -422,6 +434,12 @@ void cleanup_plugins(void)
 	while (node)
 	{
 		op = (OutputPlugin *) node->data;
+		if(op && op->cleanup) {
+		    op->cleanup();
+		    GDK_THREADS_LEAVE();
+		    while(g_main_iteration(FALSE));
+		    GDK_THREADS_ENTER();
+		}
 #ifdef HPUX
                 h = op->handle;
                 shl_unload(*h);
