summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2022-10-04 11:24:57 -0700
committerAlan Coopersmith <alan.coopersmith@oracle.com>2022-10-08 13:00:52 -0700
commit701e9e9afb88bdc68c84a4611adc533400a3df36 (patch)
tree84c543027ef122f1cc0421411e9249d386267be6
parent1d11822601fd24a396b354fa616b04ed3df8b4ef (diff)
Use same pthread-stubs as libxcb
Avoid conflicts when libX11 calls libxcb and gets its pthread functions overriding our ancient stubs. v2: Keep linking with real threads libraries when thread safety constructor is enabled. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r--configure.ac12
-rw-r--r--src/Makefile.am7
-rw-r--r--src/UIThrStubs.c157
3 files changed, 8 insertions, 168 deletions
diff --git a/configure.ac b/configure.ac
index 31fe60b3..3cf7f602 100644
--- a/configure.ac
+++ b/configure.ac
@@ -243,13 +243,16 @@ AC_SUBST(XTHREADLIB)
AC_SUBST(XTHREAD_CFLAGS)
if test "x$USE_THREAD_SAFETY_CONSTRUCTOR" = "xyes"; then
- USE_THREAD_LIBS="$XTHREADLIB"
+ USE_THREAD_LIBS="$XTHREADLIB"
+else
+ # This should be kept in sync with libxcb
+ case $host_os in
+ linux*|darwin*|solaris*) ;;
+ *) X11_REQUIRES="$X11_REQUIRES pthread-stubs" ;;
+ esac
fi
AC_SUBST(USE_THREAD_LIBS)
-AC_CHECK_LIB(c, pthread_self, [thrstubs="no"], [thrstubs="yes"], [$USE_THREAD_LIBS])
-AM_CONDITIONAL(THRSTUBS, test x$thrstubs = xyes)
-
AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], )
#
@@ -443,7 +446,6 @@ echo " Loadable xcursor library support: "$XLIB_LOADABLE_XCURSOR
echo " Threading support: "$xthreads
echo " Use Threads safe API: "$mtsafeapi
echo " Use thread safety constructor: "$USE_THREAD_SAFETY_CONSTRUCTOR
-echo " Threads stubs in libX11: "$thrstubs
echo " XCMS: "$XCMS
echo " Internationalization support: "$XLOCALE
echo " XF86BigFont support: "$XF86BIGFONT
diff --git a/src/Makefile.am b/src/Makefile.am
index b2752d9b..fcfa29de 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -333,17 +333,12 @@ if OS2
libX11_la_SOURCES+=os2Stubs.c
endif OS2
-if THRSTUBS
-libX11_la_SOURCES+=UIThrStubs.c
-endif
-
x11datadir = @X11_DATADIR@
x11data_DATA = XErrorDB
EXTRA_DIST = \
$(x11data_DATA) \
- os2Stubs.c \
- UIThrStubs.c
+ os2Stubs.c
libX11_xcb_la_SOURCES = x11_xcb.c Xxcbint.h
libX11_xcb_la_LDFLAGS = -version-number 1:0:0 -no-undefined
diff --git a/src/UIThrStubs.c b/src/UIThrStubs.c
deleted file mode 100644
index 95873e88..00000000
--- a/src/UIThrStubs.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *
- * Copyright (c) 1995 David E. Wexelblat. All rights reserved
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL DAVID E. WEXELBLAT BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of David E. Wexelblat shall
- * not be used in advertising or otherwise to promote the sale, use or
- * other dealings in this Software without prior written authorization
- * from David E. Wexelblat.
- *
- */
-
-/*
- * Stubs for thread functions needed by the X library. Supports
- * UnixWare 2.x threads; may support Solaris 2 threads as well, but not
- * tested. Defining things this way removes the dependency of the X
- * library on the threads library, but still supports threads if the user
- * specificies the thread library on the link line.
- */
-
-/*
- * Modifications by Carlos A M dos Santos, XFree86 Project, November 1999.
- *
- * Explanation from <X11/Xos_r.h>:
- * The structure below is complicated, mostly because P1003.1c (the
- * IEEE POSIX Threads spec) went through lots of drafts, and some
- * vendors shipped systems based on draft API that were changed later.
- * Unfortunately POSIX did not provide a feature-test macro for
- * distinguishing each of the drafts.
- */
-
-#ifdef CTHREADS
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <cthreads.h>
-typedef cthread_t xthread_t;
-#define xthread_self cthread_self
-#pragma weak cthread_self = _Xthr_self_stub_
-#define xmutex_init mutex_init
-#pragma weak mutex_init = _Xthr_zero_stub_
-#pragma weak mutex_clear = _Xthr_zero_stub_
-#pragma weak mutex_lock = _Xthr_zero_stub_
-#pragma weak mutex_unlock = _Xthr_zero_stub_
-#pragma weak condition_init = _Xthr_zero_stub_
-#pragma weak condition_clear = _Xthr_zero_stub_
-#pragma weak condition_wait = _Xthr_zero_stub_
-#pragma weak condition_signal = _Xthr_zero_stub_
-#pragma weak condition_broadcast = _Xthr_zero_stub_
-#else /* !CTHREADS */
-#if defined(SVR4) && !defined(__sgi)
-#include <thread.h>
-typedef thread_t xthread_t;
-#pragma weak thr_self = _Xthr_self_stub_
-#pragma weak mutex_init = _Xthr_zero_stub_
-#pragma weak mutex_destroy = _Xthr_zero_stub_
-#pragma weak mutex_lock = _Xthr_zero_stub_
-#pragma weak mutex_unlock = _Xthr_zero_stub_
-#pragma weak cond_init = _Xthr_zero_stub_
-#pragma weak cond_destroy = _Xthr_zero_stub_
-#pragma weak cond_wait = _Xthr_zero_stub_
-#pragma weak cond_signal = _Xthr_zero_stub_
-#pragma weak cond_broadcast = _Xthr_zero_stub_
-#else /* !SVR4 */
-#ifdef WIN32
-#include <X11/Xthreads.h>
-#else /* !WIN32 */
-#ifdef USE_TIS_SUPPORT
-#include <tis.h>
-typedef pthread_t xthread_t;
-#pragma weak tis_self = _Xthr_self_stub_
-#pragma weak tis_mutex_init = _Xthr_zero_stub_
-#pragma weak tis_mutex_destroy = _Xthr_zero_stub_
-#pragma weak tis_mutex_lock = _Xthr_zero_stub_
-#pragma weak tis_mutex_unlock = _Xthr_zero_stub_
-#pragma weak tis_cond_init = _Xthr_zero_stub_
-#pragma weak tis_cond_destroy = _Xthr_zero_stub_
-#pragma weak tis_cond_wait = _Xthr_zero_stub_
-#pragma weak tis_cond_signal = _Xthr_zero_stub_
-#pragma weak tis_cond_broadcast = _Xthr_zero_stub_
-#else
-#include <pthread.h>
-typedef pthread_t xthread_t;
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-xthread_t pthread_self() __attribute__ ((weak, alias ("_Xthr_self_stub_")));
-int pthread_mutex_init() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_mutex_destroy() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_mutex_lock() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_mutex_unlock() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_cond_init() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_cond_destroy() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_cond_wait() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_cond_signal() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_cond_broadcast() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_key_create() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-void *pthread_getspecific() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-int pthread_setspecific() __attribute__ ((weak, alias ("_Xthr_zero_stub_")));
-#else /* __GNUC__ */
-#pragma weak pthread_self = _Xthr_self_stub_
-#pragma weak pthread_mutex_init = _Xthr_zero_stub_
-#pragma weak pthread_mutex_destroy = _Xthr_zero_stub_
-#pragma weak pthread_mutex_lock = _Xthr_zero_stub_
-#pragma weak pthread_mutex_unlock = _Xthr_zero_stub_
-#pragma weak pthread_cond_init = _Xthr_zero_stub_
-#pragma weak pthread_cond_destroy = _Xthr_zero_stub_
-#pragma weak pthread_cond_wait = _Xthr_zero_stub_
-#pragma weak pthread_cond_signal = _Xthr_zero_stub_
-#pragma weak pthread_cond_broadcast = _Xthr_zero_stub_
-/* These are added for libGL */
-#pragma weak pthread_key_create = _Xthr_zero_stub_
-#pragma weak pthread_getspecific = _Xthr_zero_stub_
-#pragma weak pthread_setspecific = _Xthr_zero_stub_
-#endif /* __GNUC__ */
-#if defined(_DECTHREADS_) || defined(linux)
-#pragma weak pthread_equal = _Xthr_equal_stub_ /* See Xthreads.h! */
-int
-_Xthr_equal_stub_()
-{
- return(1);
-}
-#endif /* _DECTHREADS_ || linux */
-#endif /* USE_TIS_SUPPORT */
-#endif /* WIN32 */
-#endif /* SVR4 */
-#endif /* CTHREADS */
-
-static xthread_t
-_Xthr_self_stub_()
-{
- static xthread_t _X_no_thread_id;
-
- return(_X_no_thread_id); /* defined by <X11/Xthreads.h> */
-}
-
-static int
-_Xthr_zero_stub_()
-{
- return(0);
-}