[libsoup/wip/noload] Abort when libsoup 2 is already loaded in process
- From: Patrick Griffis <pgriffis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup/wip/noload] Abort when libsoup 2 is already loaded in process
- Date: Thu, 22 Apr 2021 00:19:29 +0000 (UTC)
commit 24505d53e8c38d5fc48b2c500fb8c2cd5002904d
Author: Patrick Griffis <pgriffis igalia com>
Date: Wed Apr 21 10:19:37 2021 -0500
Abort when libsoup 2 is already loaded in process
This avoids accidental mixups causing unpredictable issues
libsoup/meson.build | 3 +++
libsoup/soup-init.c | 13 +++++++++++++
meson.build | 15 +++++++++++++++
3 files changed, 31 insertions(+)
---
diff --git a/libsoup/meson.build b/libsoup/meson.build
index adcccc3e..49d0d1aa 100644
--- a/libsoup/meson.build
+++ b/libsoup/meson.build
@@ -203,6 +203,7 @@ libsoup = library('soup-@0@'.format(apiversion),
soversion : soversion,
darwin_versions: darwin_versions,
c_args : libsoup_c_args,
+ link_args : dl_link_args,
include_directories : libsoup_includes,
gnu_symbol_visibility: 'hidden',
install : true,
@@ -215,6 +216,7 @@ libsoup_static = static_library('soup-@0@-static'.format(apiversion),
soup_enums,
],
c_args : libsoup_c_args,
+ link_args : dl_link_args,
include_directories : libsoup_includes,
dependencies : deps,
)
@@ -236,6 +238,7 @@ libsoup_dep = declare_dependency(link_with : libsoup,
libsoup_static_dep = declare_dependency(link_with : libsoup_static,
include_directories : libsoup_includes,
sources : soup_enum_h,
+ link_args : dl_link_args,
dependencies : [ platform_deps, glib_deps ]
)
diff --git a/libsoup/soup-init.c b/libsoup/soup-init.c
index 816c9ae9..459d7520 100644
--- a/libsoup/soup-init.c
+++ b/libsoup/soup-init.c
@@ -9,6 +9,10 @@
#include <config.h>
#endif
+#ifdef HAVE_RTLD_NOLOAD
+#include <dlfcn.h>
+#endif
+
#include <glib/gi18n-lib.h>
#include "gconstructor.h"
@@ -34,6 +38,15 @@ soup_init (void)
#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
#endif
+
+#ifdef HAVE_RTLD_NOLOAD
+ gpointer handle = dlopen("libsoup-2.4.so.1", RTLD_NOW | RTLD_NOLOAD);
+ if (handle) {
+ g_error ("libsoup 2 was detected loading libsoup 3. This is not supported.");
+ dlclose (handle);
+ }
+#endif
+
}
#if defined (G_OS_WIN32)
diff --git a/meson.build b/meson.build
index 3881d7c7..02823395 100644
--- a/meson.build
+++ b/meson.build
@@ -161,6 +161,21 @@ if cc.has_function('gmtime_r', prefix : '#include <time.h>', args : default_sour
cdata.set('HAVE_GMTIME_R', '1')
endif
+# dlopen
+dl_dep = dependency('dl', required : false)
+dl_link_args = ''
+if cc.has_function('dlopen',
+ prefix : '#include <dlfcn.h>',
+ dependencies : dl_dep,
+ args : '-ldl'
+)
+ cdata.set('HAVE_RTLD_NOLOAD',
+ cc.has_header_symbol('dlfcn.h', 'RTLD_NOLOAD')
+ )
+ platform_deps += dl_dep
+ dl_link_args = '-ldl'
+endif
+
# sysprof support
libsysprof_capture_dep = dependency('sysprof-capture-4',
required: get_option('sysprof'),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]