mirror of
https://gitlab.freedesktop.org/xorg/lib/libx11.git
synced 2026-05-05 04:08:15 +02:00
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>
This commit is contained in:
parent
1d11822601
commit
701e9e9afb
3 changed files with 8 additions and 168 deletions
12
configure.ac
12
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
157
src/UIThrStubs.c
157
src/UIThrStubs.c
|
|
@ -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);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue