diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-03-31 01:47:34 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-03-31 01:47:34 +0000 |
commit | 3fa21fd813ac323f2890812b99663d7cf17578eb (patch) | |
tree | 4a98c7119b18fd5c91368eb8e95c4371ee71fc54 /nptl/tst-tsd5.c | |
parent | a70e964ee0ec3827b4d24ed3fbff1b614b1a0269 (diff) | |
download | glibc-3fa21fd813ac323f2890812b99663d7cf17578eb.zip glibc-3fa21fd813ac323f2890812b99663d7cf17578eb.tar.gz glibc-3fa21fd813ac323f2890812b99663d7cf17578eb.tar.bz2 |
Update.
2004-03-30 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/libc-start.c (LIBC_START_MAIN)
[HAVE_CLEANUP_JMP_BUF]: Call __nptl_deallocate_tsd.
Diffstat (limited to 'nptl/tst-tsd5.c')
-rw-r--r-- | nptl/tst-tsd5.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/nptl/tst-tsd5.c b/nptl/tst-tsd5.c new file mode 100644 index 0000000..8793e33 --- /dev/null +++ b/nptl/tst-tsd5.c @@ -0,0 +1,81 @@ +/* Copyright (C) 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> + + +static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; + + +static void +cl (void *p) +{ + pthread_mutex_unlock (&m); +} + + +static void * +tf (void *arg) +{ + if (pthread_mutex_lock (&m) != 0) + { + puts ("2nd mutex_lock failed"); + exit (1); + } + + exit (0); +} + + +static int +do_test (void) +{ + pthread_key_t k; + if (pthread_key_create (&k, cl) != 0) + { + puts ("key_create failed"); + return 1; + } + if (pthread_setspecific (k, (void *) 1) != 0) + { + puts ("setspecific failed"); + return 1; + } + + if (pthread_mutex_lock (&m) != 0) + { + puts ("1st mutex_lock failed"); + return 1; + } + + pthread_t th; + if (pthread_create (&th, NULL, tf, NULL) != 0) + { + puts ("create failed"); + return 1; + } + + pthread_exit (NULL); +} + + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |