This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
pthread_key_delete should not try to contact the thread manager if that
does not exist yet. Otherwise this program hangs:
#include <pthread.h>
#include <stdio.h>
int
main ()
{
pthread_key_t k;
pthread_key_create (&k, NULL);
pthread_key_delete (k);
return 0;
}
Andreas.
2001-12-13 Andreas Schwab <schwab@suse.de>
* specific.c (pthread_key_delete): Don't contact the thread
manager if no threads have been created yet.
--- specific.c.~1.13.~ Thu Nov 29 10:40:10 2001
+++ specific.c Thu Dec 13 10:26:16 2001
@@ -102,25 +102,28 @@
/* Set the value of the key to NULL in all running threads, so
that if the key is reallocated later by pthread_key_create, its
- associated values will be NULL in all threads. */
+ associated values will be NULL in all threads.
- {
- struct pthread_key_delete_helper_args args;
- struct pthread_request request;
-
- args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE;
- args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE;
- args.self = 0;
-
- request.req_thread = self;
- request.req_kind = REQ_FOR_EACH_THREAD;
- request.req_args.for_each.arg = &args;
- request.req_args.for_each.fn = pthread_key_delete_helper;
-
- TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request,
- (char *) &request, sizeof(request)));
- suspend(self);
- }
+ Do nothing if no threads have been created yet. */
+
+ if (__pthread_manager_request != -1)
+ {
+ struct pthread_key_delete_helper_args args;
+ struct pthread_request request;
+
+ args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE;
+ args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE;
+ args.self = 0;
+
+ request.req_thread = self;
+ request.req_kind = REQ_FOR_EACH_THREAD;
+ request.req_args.for_each.arg = &args;
+ request.req_args.for_each.fn = pthread_key_delete_helper;
+
+ TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request,
+ (char *) &request, sizeof(request)));
+ suspend(self);
+ }
pthread_mutex_unlock(&pthread_keys_mutex);
return 0;
--
Andreas Schwab "And now for something
Andreas.Schwab@suse.de completely different."
SuSE Labs, SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |