mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
Harmonize generic stdio-lock support with nptl
This fixes build when _IO_funlockfile is a macro, fixes build where _IO_acquire_lock_clear_flags2 is used, and fixes unlocking on unexpected stack unwind. * sysdeps/generic/stdio-lock.h [__EXCEPTIONS] (_IO_acquire_lock, _IO_release_lock ): Use cleanup attribute on new _IO_acquire_lock_file variable instead of assuming that _IO_release_lock will be called. [!__EXCEPTIONS] (_IO_acquire_lock): Define to non-existing _IO_acquire_lock_needs_exceptions_enabled. (_IO_acquire_lock_clear_flags2): New macro.
This commit is contained in:
parent
661a29a518
commit
2cf3e1aa74
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
||||
2015-12-22 Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
|
||||
Harmonize generic stdio-lock support with nptl
|
||||
|
||||
This fixes build when _IO_funlockfile is a macro, fixes build where
|
||||
_IO_acquire_lock_clear_flags2 is used, and fixes unlocking on unexpected
|
||||
stack unwind.
|
||||
|
||||
* sysdeps/generic/stdio-lock.h [__EXCEPTIONS] (_IO_acquire_lock,
|
||||
_IO_release_lock ): Use cleanup attribute on new
|
||||
_IO_acquire_lock_file variable instead of assuming that
|
||||
_IO_release_lock will be called.
|
||||
[!__EXCEPTIONS] (_IO_acquire_lock): Define to non-existing
|
||||
_IO_acquire_lock_needs_exceptions_enabled.
|
||||
(_IO_acquire_lock_clear_flags2): New macro.
|
||||
|
||||
2015-12-22 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
* sysdeps/powerpc/fpu/libm-test-ulps: Regenerated.
|
||||
|
@ -45,13 +45,26 @@ __libc_lock_define_recursive (typedef, _IO_lock_t)
|
||||
__libc_cleanup_region_end (_doit)
|
||||
|
||||
#if defined _LIBC && IS_IN (libc)
|
||||
# define _IO_acquire_lock(_fp) \
|
||||
_IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp)); \
|
||||
_IO_flockfile (_fp)
|
||||
|
||||
# define _IO_release_lock(_fp) \
|
||||
_IO_funlockfile (_fp); \
|
||||
_IO_cleanup_region_end (0)
|
||||
# ifdef __EXCEPTIONS
|
||||
# define _IO_acquire_lock(_fp) \
|
||||
do { \
|
||||
_IO_FILE *_IO_acquire_lock_file \
|
||||
__attribute__((cleanup (_IO_acquire_lock_fct))) \
|
||||
= (_fp); \
|
||||
_IO_flockfile (_IO_acquire_lock_file);
|
||||
# define _IO_acquire_lock_clear_flags2(_fp) \
|
||||
do { \
|
||||
_IO_FILE *_IO_acquire_lock_file \
|
||||
__attribute__((cleanup (_IO_acquire_lock_clear_flags2_fct))) \
|
||||
= (_fp); \
|
||||
_IO_flockfile (_IO_acquire_lock_file);
|
||||
# else
|
||||
# define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled
|
||||
# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
|
||||
# endif
|
||||
# define _IO_release_lock(_fp) ; } while (0)
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* stdio-lock.h */
|
||||
|
Loading…
Reference in New Issue
Block a user