1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-09 13:30:26 +02:00

ltdl wrappers now use a recursive mutex.

Fixes <https://bugs.gnu.org/29275>.
Reported by noxdafox <noxdafox@gmail.com>.

* libguile/dynl.c (scm_init_dynamic_linking): Add call to
'scm_i_pthread_mutex_init'.
This commit is contained in:
Ludovic Courtès 2017-11-22 16:46:11 +01:00
parent bb5d316b16
commit 48d42553ef

View file

@ -1,7 +1,7 @@
/* dynl.c - dynamic linking
*
* Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002,
* 2003, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
* 2003, 2008, 2009, 2010, 2011, 2017 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@ -66,10 +66,9 @@ maybe_drag_in_eprintf ()
#include <ltdl.h>
/*
From the libtool manual: "Note that libltdl is not threadsafe,
i.e. a multithreaded application has to use a mutex for libltdl.".
*/
/* From the libtool manual: "Note that libltdl is not threadsafe,
i.e. a multithreaded application has to use a mutex for libltdl.".
Note: We initialize it as a recursive mutex below. */
static scm_i_pthread_mutex_t ltdl_lock = SCM_I_PTHREAD_MUTEX_INITIALIZER;
/* LT_PATH_SEP-separated extension library search path, searched last */
@ -401,6 +400,13 @@ scm_init_dynamic_linking ()
{
scm_tc16_dynamic_obj = scm_make_smob_type ("dynamic-object", 0);
scm_set_smob_print (scm_tc16_dynamic_obj, dynl_obj_print);
/* Make LTDL_LOCK recursive so that a pre-unwind handler can still use
'dynamic-link', as is the case at the REPL. See
<https://bugs.gnu.org/29275>. */
scm_i_pthread_mutex_init (&ltdl_lock,
scm_i_pthread_mutexattr_recursive);
sysdep_dynl_init ();
#include "libguile/dynl.x"
}