diff options
author | Oliver <halting@riseup.net> | 2022-11-11 17:04:00 +0000 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2022-11-11 17:04:00 +0000 |
commit | 696d19d5db7bcb1c1f582c2b1846520e7e0870cb (patch) | |
tree | b8c631b7bda4d6b1d703696c438d7fd3264c4c9f | |
parent | b4f24b272c6ef888b6fcfcf80670c196b2e8f755 (diff) | |
download | xorg-lib-libX11-696d19d5db7bcb1c1f582c2b1846520e7e0870cb.tar.gz |
Add XFreeThreads function.
-rw-r--r-- | include/X11/Xlib.h | 4 | ||||
-rw-r--r-- | man/XInitThreads.man | 8 | ||||
-rw-r--r-- | src/globals.c | 6 | ||||
-rw-r--r-- | src/locking.c | 23 |
4 files changed, 40 insertions, 1 deletions
diff --git a/include/X11/Xlib.h b/include/X11/Xlib.h index f62fb470..29ea5715 100644 --- a/include/X11/Xlib.h +++ b/include/X11/Xlib.h @@ -1735,6 +1735,10 @@ extern Status XInitThreads( void ); +extern Status XFreeThreads( + void +); + extern void XLockDisplay( Display* /* display */ ); diff --git a/man/XInitThreads.man b/man/XInitThreads.man index 4ae95228..b629bd28 100644 --- a/man/XInitThreads.man +++ b/man/XInitThreads.man @@ -52,6 +52,8 @@ XInitThreads, XLockDisplay, XUnlockDisplay \- multi-threading support .HP Status XInitThreads\^(void); .HP +Status XFreeThreads\^(void); +.HP void XLockDisplay\^(\^Display *\fIdisplay\fP\^); .HP void XUnlockDisplay\^(\^Display *\fIdisplay\fP\^); @@ -76,7 +78,11 @@ are protected by some other access mechanism (for example, a mutual exclusion lock in a toolkit or through explicit client programming), Xlib thread initialization is not required. It is recommended that single-threaded programs not call this function. - +.LP +The +.B XFreeThreads +function frees the memory allocated by +.BR XInitThreads . .LP The .B XLockDisplay diff --git a/src/globals.c b/src/globals.c index 66b589fe..c07de431 100644 --- a/src/globals.c +++ b/src/globals.c @@ -105,4 +105,10 @@ xlib_ctor(void) { XInitThreads(); } + +__attribute__((destructor)) static void +xlib_dtor(void) +{ + XFreeThreads(); +} #endif diff --git a/src/locking.c b/src/locking.c index 36530691..bdc07011 100644 --- a/src/locking.c +++ b/src/locking.c @@ -673,9 +673,32 @@ Status XInitThreads(void) return 1; } +Status XFreeThreads(void) +{ + if (global_lock.lock != NULL) { + xmutex_free(global_lock.lock); + global_lock.lock = NULL; + } + if (i18n_lock.lock != NULL) { + xmutex_free(i18n_lock.lock); + i18n_lock.lock = NULL; + } + if (conv_lock.lock != NULL) { + xmutex_free(conv_lock.lock); + conv_lock.lock = NULL; + } + + return 1; +} + #else /* XTHREADS */ Status XInitThreads(void) { return 0; } + +Status XFreeThreads(void) +{ + return 0; +} #endif /* XTHREADS */ |