summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authoredwin <edwin@FreeBSD.org>2009-09-14 11:20:45 +0000
committeredwin <edwin@FreeBSD.org>2009-09-14 11:20:45 +0000
commit5ff9a427151104339055758587bf7a5cecf98307 (patch)
treebfd4113307d4250ba3aea5722a59b4bfe9a276c2 /lib
parent9a86a99559b361dd9c8221bd45c8ced74f6fe95a (diff)
downloadFreeBSD-src-5ff9a427151104339055758587bf7a5cecf98307.zip
FreeBSD-src-5ff9a427151104339055758587bf7a5cecf98307.tar.gz
Improve the way failure of pthread_key_create() gets detected.
PR: threads/138603 Submitted by: Mikulas Patocka MFC after: 1 week
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdtime/localtime.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/libc/stdtime/localtime.c b/lib/libc/stdtime/localtime.c
index e0ed73f..9fc5f3e 100644
--- a/lib/libc/stdtime/localtime.c
+++ b/lib/libc/stdtime/localtime.c
@@ -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);
}
}
OpenPOWER on IntegriCloud