summaryrefslogtreecommitdiff
path: root/tsd.c
diff options
context:
space:
mode:
authorrpj <rpj>2000-07-25 11:27:23 +0000
committerrpj <rpj>2000-07-25 11:27:23 +0000
commitb035ed05977fdef5ced4691028284b7f0ebaba19 (patch)
tree008e3d049ac5a01cd34118ddb2f219d7040845b8 /tsd.c
parent20aff4de1de1ed8c89c5b617e4eae4f475bb4a6e (diff)
2000-07-25 Ross Johnson <rpj@setup1.ise.canberra.edu.au>
* dll.c (dllMain): Remove 2000-07-21 change - problem appears to be in pthread_create(). 2000-07-21 Ross Johnson <rpj@setup1.ise.canberra.edu.au> * create.c (pthread_create): Set threadH to 0 (zero) everywhere. Some assignments were using NULL. Maybe it should be NULL everywhere - need to check. (I know they are nearly always the same thing - but not by definition.) * dll.c: Include resource leakage work-around. This is a partial FIXME which doesn't stop all leakage. The real problem needs to be found and fixed. - "David Baggett" <dmb@itasoftware.com> * misc.c (pthread_self): Try to catch NULL thread handles at the point where they might be generated, even though they should always be valid at this point. * tsd.c (pthread_setspecific): return an error value if pthread_self() returns NULL. * sync.c (pthread_join): return an error value if pthread_self() returns NULL. * signal.c (pthread_sigmask): return an error value if pthread_self() returns NULL.
Diffstat (limited to 'tsd.c')
-rw-r--r--tsd.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/tsd.c b/tsd.c
index f8656ce..5183cd7 100644
--- a/tsd.c
+++ b/tsd.c
@@ -25,11 +25,11 @@
#include "pthread.h"
#include "implement.h"
-
-/* TLS_OUT_OF_INDEXES not defined on WinCE */
-#ifndef TLS_OUT_OF_INDEXES
-#define TLS_OUT_OF_INDEXES 0xffffffff
-#endif
+
+/* TLS_OUT_OF_INDEXES not defined on WinCE */
+#ifndef TLS_OUT_OF_INDEXES
+#define TLS_OUT_OF_INDEXES 0xffffffff
+#endif
int
pthread_key_create (pthread_key_t * key, void (*destructor) (void *))
@@ -212,6 +212,7 @@ pthread_setspecific (pthread_key_t key, const void *value)
* ENOSPC a required resource has been exhausted,
* ENOSYS semaphores are not supported,
* EPERM the process lacks appropriate privilege
+ * ENOENT the thread couldn't find it's own handle
*
* ------------------------------------------------------
*/
@@ -227,6 +228,10 @@ pthread_setspecific (pthread_key_t key, const void *value)
* thread if one wasn't explicitly created
*/
self = pthread_self ();
+ if (self == NULL)
+ {
+ return ENOENT;
+ }
}
else
{