Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Oct 2009 11:00:40 +0000 (UTC)
From:      Edwin Groothuis <edwin@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r198579 - in stable/7/lib/libc: . stdtime
Message-ID:  <200910291100.n9TB0eIo093813@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: edwin
Date: Thu Oct 29 11:00:39 2009
New Revision: 198579
URL: http://svn.freebsd.org/changeset/base/198579

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

Modified:
  stable/7/lib/libc/   (props changed)
  stable/7/lib/libc/stdtime/localtime.c

Modified: stable/7/lib/libc/stdtime/localtime.c
==============================================================================
--- stable/7/lib/libc/stdtime/localtime.c	Thu Oct 29 10:38:17 2009	(r198578)
+++ stable/7/lib/libc/stdtime/localtime.c	Thu Oct 29 11:00:39 2009	(r198579)
@@ -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,12 +1414,15 @@ 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) {
 		_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);
 			}
 		}
@@ -1510,12 +1514,14 @@ 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) {
 		_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);
 			}
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200910291100.n9TB0eIo093813>