Author: edwin
Date: Mon Sep 14 11:20:45 2009
New Revision: 197189
URL: http://svn.freebsd.org/changeset/base/197189

Log:
  Improve the way failure of pthread_key_create() gets detected.
  
  PR:           threads/138603
  Submitted by: Mikulas Patocka
  MFC after:    1 week

Modified:
  head/lib/libc/stdtime/localtime.c

Modified: head/lib/libc/stdtime/localtime.c
==============================================================================
--- head/lib/libc/stdtime/localtime.c   Mon Sep 14 11:01:15 2009        
(r197188)
+++ head/lib/libc/stdtime/localtime.c   Mon Sep 14 11:20:45 2009        
(r197189)
@@ -21,6 +21,7 @@ __FBSDID("$FreeBSD$");
 #include "namespace.h"
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include "private.h"
@@ -1413,13 +1414,16 @@ const time_t * const    timep;
        static pthread_mutex_t localtime_mutex = PTHREAD_MUTEX_INITIALIZER;
        static pthread_key_t localtime_key = -1;
        struct tm *p_tm;
+       int r;
 
        if (__isthreaded != 0) {
                if (localtime_key < 0) {
                        _pthread_mutex_lock(&localtime_mutex);
                        if (localtime_key < 0) {
-                               if (_pthread_key_create(&localtime_key, free) < 
0) {
+                               if ((r = _pthread_key_create(&localtime_key,
+                                   free)) != 0) {
                                        _pthread_mutex_unlock(&localtime_mutex);
+                                       errno = r;
                                        return(NULL);
                                }
                        }
@@ -1512,13 +1516,16 @@ const time_t * const    timep;
        static pthread_mutex_t gmtime_mutex = PTHREAD_MUTEX_INITIALIZER;
        static pthread_key_t gmtime_key = -1;
        struct tm *p_tm;
+       int r;
 
        if (__isthreaded != 0) {
                if (gmtime_key < 0) {
                        _pthread_mutex_lock(&gmtime_mutex);
                        if (gmtime_key < 0) {
-                               if (_pthread_key_create(&gmtime_key, free) < 0) 
{
+                               if ((r = _pthread_key_create(&gmtime_key,
+                                   free)) != 0) {
                                        _pthread_mutex_unlock(&gmtime_mutex);
+                                       errno = r;
                                        return(NULL);
                                }
                        }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to