This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.27.9000-216-g542c20a
- From: sthibaul at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 18 Mar 2018 16:28:21 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.27.9000-216-g542c20a
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 542c20a171cbc8cb63155fa6344708d26e9c446b (commit)
from 9a37922ee049c2a12ba9d9457f7711ecd9813c88 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=542c20a171cbc8cb63155fa6344708d26e9c446b
commit 542c20a171cbc8cb63155fa6344708d26e9c446b
Author: Agustina Arzille <avarzille@riseup.net>
Date: Sun Mar 18 17:27:00 2018 +0100
hurd: Rewrite __libc_cleanup_*
This makes it notably safe against 'return' and such, and used for
__libc_cleanup_push/pop.
* sysdeps/mach/libc-lock.h (__libc_cleanup_frame): Define structure.
(__libc_cleanup_fct): Define function.
(__libc_cleanup_region_start, __libc_cleanup_region_end,
__libc_cleanup_end): Rewrite implementation using
__attribute__ ((__cleanup__)).
(__libc_cleanup_push, __libc_cleanup_pop): New macros.
diff --git a/ChangeLog b/ChangeLog
index c0074a6..36430d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-03-18 Agustina Arzille <avarzille@riseup.net>
+
+ * sysdeps/mach/libc-lock.h (__libc_cleanup_frame): Define structure.
+ (__libc_cleanup_fct): Define function.
+ (__libc_cleanup_region_start, __libc_cleanup_region_end,
+ __libc_cleanup_end): Rewrite implementation using
+ __attribute__ ((__cleanup__)).
+ (__libc_cleanup_push, __libc_cleanup_pop): New macros.
+
2018-03-18 Samuel Thibault <samuel.thibault@ens-lyon.org>
* sysdeps/mach/hurd/cthreads.c: Include <cthreads.h>.
diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h
index 89e5715..1bb0235 100644
--- a/sysdeps/mach/libc-lock.h
+++ b/sysdeps/mach/libc-lock.h
@@ -73,25 +73,38 @@ typedef cthread_key_t __libc_key_t;
#define __libc_rwlock_trywrlock __libc_lock_trylock
#define __libc_rwlock_unlock __libc_lock_unlock
-
-/* Start a critical region with a cleanup function */
-#define __libc_cleanup_region_start(DOIT, FCT, ARG) \
-{ \
- typeof (***(FCT)) *__save_FCT = (DOIT) ? (FCT) : 0; \
- typeof (ARG) __save_ARG = ARG; \
- /* close brace is in __libc_cleanup_region_end below. */
-
-/* End a critical region started with __libc_cleanup_region_start. */
-#define __libc_cleanup_region_end(DOIT) \
- if ((DOIT) && __save_FCT != 0) \
- (*__save_FCT)(__save_ARG); \
+struct __libc_cleanup_frame
+{
+ void (*__fct) (void *);
+ void *__argp;
+ int __doit;
+};
+
+__extern_inline void
+__libc_cleanup_fct (struct __libc_cleanup_frame *framep)
+{
+ if (framep->__doit)
+ framep->__fct (framep->__argp);
}
-/* Sometimes we have to exit the block in the middle. */
-#define __libc_cleanup_end(DOIT) \
- if ((DOIT) && __save_FCT != 0) \
- (*__save_FCT)(__save_ARG); \
-
+/* Start a critical region with a cleanup function */
+#define __libc_cleanup_region_start(DOIT, FCT, ARG) \
+ do \
+ { \
+ struct __libc_cleanup_frame __cleanup \
+ __attribute__ ((__cleanup__ (__libc_cleanup_fct))) = \
+ { .__fct = (FCT), .__argp = (ARG), .__doit = (DOIT) };
+
+/* This one closes the brace above. */
+#define __libc_cleanup_region_end(DOIT) \
+ __cleanup.__doit = (DOIT); \
+ } \
+ while (0)
+
+#define __libc_cleanup_end(DOIT) __cleanup.__doit = (DOIT);
+
+#define __libc_cleanup_push(fct, arg) __libc_cleanup_region_start (1, fct, arg)
+#define __libc_cleanup_pop(execute) __libc_cleanup_region_end (execute)
/* Use mutexes as once control variables. */
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 9 ++++++++
sysdeps/mach/libc-lock.h | 47 +++++++++++++++++++++++++++++----------------
2 files changed, 39 insertions(+), 17 deletions(-)
hooks/post-receive
--
GNU C Library master sources