Skip to content

Commit

Permalink
* sysdeps/pthread/bits/libc-lock.h (__libc_rwlock_init): Inside of
Browse files Browse the repository at this point in the history
	libc.so just clear NAME.
	(__libc_rwlock_fini): Nop inside of libc.so.
	* tst-initializers1.c (main): Test if PTHREAD_RWLOCK_INITIALIZER is
	all zeros.
  • Loading branch information
Ulrich Drepper committed Oct 10, 2007
1 parent 5a01ab7 commit 59d430c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 4 deletions.
2 changes: 0 additions & 2 deletions localedata/locales/de_DE
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,6 @@ END LC_CTYPE

LC_COLLATE

define DIACRIT_FORWARD

% Copy the template from ISO/IEC 14651
copy "iso14651_t1"

Expand Down
8 changes: 8 additions & 0 deletions nptl/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2007-10-10 Jakub Jelinek <jakub@redhat.com>

* sysdeps/pthread/bits/libc-lock.h (__libc_rwlock_init): Inside of
libc.so just clear NAME.
(__libc_rwlock_fini): Nop inside of libc.so.
* tst-initializers1.c (main): Test if PTHREAD_RWLOCK_INITIALIZER is
all zeros.

2007-09-02 Ulrich Drepper <drepper@redhat.com>

* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
Expand Down
15 changes: 13 additions & 2 deletions nptl/sysdeps/pthread/bits/libc-lock.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,15 @@ typedef pthread_key_t __libc_key_t;
# define __libc_lock_init(NAME) \
__libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)
#endif
#define __libc_rwlock_init(NAME) \
#if defined SHARED && !defined NOT_IN_libc
/* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER, 0) is
inefficient. */
# define __libc_rwlock_init(NAME) \
(__builtin_memset (&(NAME), '\0', sizeof (NAME)), 0)
#else
# define __libc_rwlock_init(NAME) \
__libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0)
#endif

/* Same as last but this time we initialize a recursive mutex. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
Expand Down Expand Up @@ -214,8 +221,12 @@ typedef pthread_key_t __libc_key_t;
# define __libc_lock_fini(NAME) \
__libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
#endif
#define __libc_rwlock_fini(NAME) \
#if defined SHARED && !defined NOT_IN_libc
# define __libc_rwlock_fini(NAME) ((void) 0)
#else
# define __libc_rwlock_fini(NAME) \
__libc_maybe_call (__pthread_rwlock_destroy, (&(NAME)), 0)
#endif

/* Finalize recursive named lock. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
Expand Down
7 changes: 7 additions & 0 deletions nptl/tst-initializers1.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,12 @@ main (void)
if (rwl_writer.__data.__flags
!= PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
return 6;
/* <bits/libc-lock.h> __libc_rwlock_init definition for libc.so
relies on PTHREAD_RWLOCK_INITIALIZER being all zeros. If
that ever changes, <bits/libc-lock.h> needs updating. */
size_t i;
for (i = 0; i < sizeof (rwl_normal); i++)
if (((char *) &rwl_normal)[i] != '\0')
return 7;
return 0;
}

0 comments on commit 59d430c

Please sign in to comment.