[libsoup/libsoup-2-74] Error when libsoup3 is detected as already loaded in the same process



commit e7f842c35e97e9dd2d96445b90fc64c0ba871244
Author: Patrick Griffis <pgriffis igalia com>
Date:   Wed Nov 17 11:52:34 2021 -0600

    Error when libsoup3 is detected as already loaded in the same process
    
    Companion to 9596a869414bb0811f1e1f6009c950ca7af81189
    
    See !211

 libsoup/soup-init.c | 19 +++++++++++++++++++
 meson.build         |  4 +++-
 2 files changed, 22 insertions(+), 1 deletion(-)
---
diff --git a/libsoup/soup-init.c b/libsoup/soup-init.c
index c4950ced..2155e9d4 100644
--- a/libsoup/soup-init.c
+++ b/libsoup/soup-init.c
@@ -10,6 +10,7 @@
 #endif
 
 #include <glib/gi18n-lib.h>
+#include <gmodule.h>
 #include "gconstructor.h"
 
 #ifdef G_OS_WIN32
@@ -19,6 +20,21 @@
 HMODULE soup_dll;
 #endif
 
+static gboolean
+soup3_is_loaded (void)
+{
+    GModule *module = g_module_open (NULL, 0);
+    gpointer func;
+    gboolean result = FALSE;
+
+    if (g_module_symbol (module, "soup_date_time_new_from_http_string", &func))
+        result = TRUE;
+
+    g_module_close (module);
+
+    return result;
+}
+
 static void
 soup_init (void)
 {
@@ -34,6 +50,9 @@ soup_init (void)
 #ifdef HAVE_BIND_TEXTDOMAIN_CODESET
        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 #endif
+
+        if (soup3_is_loaded ())
+                g_error ("libsoup3 symbols detected. Using libsoup2 and libsoup3 in the same process is not 
supported.");
 }
 
 #if defined (G_OS_WIN32)
diff --git a/meson.build b/meson.build
index fc284848..707eb0d5 100644
--- a/meson.build
+++ b/meson.build
@@ -83,12 +83,14 @@ add_project_arguments(common_flags, language : 'c')
 glib_required_version = '>= 2.58'
 glib_dep = dependency('glib-2.0', version : glib_required_version,
                        fallback: ['glib', 'libglib_dep'])
+gmodule_dep = dependency('gmodule-2.0', version : glib_required_version,
+                         fallback: ['glib', 'libgmodule_dep'])
 gobject_dep = dependency('gobject-2.0', version : glib_required_version,
                        fallback: ['glib', 'libgobject_dep'])
 gio_dep = dependency('gio-2.0', version : glib_required_version,
                        fallback: ['glib', 'libgio_dep'])
 
-glib_deps = [glib_dep, gobject_dep, gio_dep]
+glib_deps = [glib_dep, gmodule_dep, gobject_dep, gio_dep]
 
 sqlite_dep = dependency('sqlite3', required: false)
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]