[mojosetup] [2/3] Don't crash when unloading unneeded GUI plugins.
Francois Gouget
fgouget at codeweavers.com
Mon Aug 10 13:38:31 EDT 2020
The plugin's entry point table is a static variable in the .so library
which means pointers to it are no longer valid once the library has
been dlclosed(). So reset the gui pointer to make sure
deleteGuiPlugin() does not try to call gui->deinit().
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
gui.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gui.c b/gui.c
index 523c6a0..8feda49 100644
--- a/gui.c
+++ b/gui.c
@@ -109,6 +109,7 @@ static PluginList *initGuiPluginsByPriority(PluginList *plugins)
{
MojoPlatform_dlclose(i->lib);
i->lib = NULL;
+ i->gui = NULL;
} // if
} // for
} // for
@@ -191,6 +192,7 @@ static boolean loadDynamicGuiPlugin(PluginList *plugins, MojoArchive *ar)
// always close, because GTK+2 and GTK+3 can't coexist.
// we'll reload them when trying them!
MojoPlatform_dlclose(lib);
+ plug->gui = NULL;
} // if
} // if
--
2.20.1
More information about the mojosetup
mailing list