From edb6388469813ba6f4df742ae6dd55466a28976c Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 24 Aug 2001 03:25:40 +0000 Subject: * sysdeps/generic/bits/libc-lock.h: Same changes. --- sysdeps/generic/bits/libc-lock.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'sysdeps/generic/bits/libc-lock.h') diff --git a/sysdeps/generic/bits/libc-lock.h b/sysdeps/generic/bits/libc-lock.h index ca90d35c95..700ebd6062 100644 --- a/sysdeps/generic/bits/libc-lock.h +++ b/sysdeps/generic/bits/libc-lock.h @@ -94,14 +94,23 @@ } while (0) -/* Start critical region with cleanup. */ -#define __libc_cleanup_region_start(FCT, ARG) - -/* End critical region with cleanup. */ -#define __libc_cleanup_region_end(DOIT) +/* 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); \ +} /* Sometimes we have to exit the block in the middle. */ -#define __libc_cleanup_end(DOIT) +#define __libc_cleanup_end(DOIT) \ + if ((DOIT) && __save_FCT != 0) \ + (*__save_FCT)(__save_ARG); \ /* We need portable names for some of the functions. */ -- cgit 1.4.1