Always check the return value of pthread_key_create()
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Dec 2016 01:54:31 +0000 (01:54 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Dec 2016 01:54:31 +0000 (01:54 +0000)
<https://webkit.org/b/165274>

Reviewed by Darin Adler.

Source/bmalloc:

* bmalloc/PerThread.h:
(bmalloc::PerThreadStorage::init): Call BCRASH() if
pthread_key_create() returns an error.  The error code will be
stored in a register available in a crash log, so no need to log
the value explicitly.

Source/WebCore:

* platform/ios/wak/WebCoreThread.mm:
(InitThreadContextKey): Call CRASH() if pthread_key_create()
returns an error.  The error code will be stored in a register
available in a crash log, so no need to log the value
explicitly.

Source/WTF:

* wtf/ThreadIdentifierDataPthreads.cpp:
(WTF::ThreadIdentifierData::initializeOnce): Make the code more
readable by assigning a variable to the result of
pthread_key_create().  This matches the idiom used elsewhere.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@209590 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/ThreadIdentifierDataPthreads.cpp
Source/WebCore/ChangeLog
Source/WebCore/platform/ios/wak/WebCoreThread.mm
Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/PerThread.h

index 771e170..cb6819f 100644 (file)
@@ -1,3 +1,15 @@
+2016-12-08  David Kilzer  <ddkilzer@apple.com>
+
+        Always check the return value of pthread_key_create()
+        <https://webkit.org/b/165274>
+
+        Reviewed by Darin Adler.
+
+        * wtf/ThreadIdentifierDataPthreads.cpp:
+        (WTF::ThreadIdentifierData::initializeOnce): Make the code more
+        readable by assigning a variable to the result of
+        pthread_key_create().  This matches the idiom used elsewhere.
+
 2016-12-08  Keith Miller  <keith_miller@apple.com>
 
         Add 64-bit signed LEB decode method
index 1528dad..0bebfe9 100644 (file)
@@ -56,7 +56,8 @@ ThreadIdentifierData::~ThreadIdentifierData()
 
 void ThreadIdentifierData::initializeOnce()
 {
-    if (pthread_key_create(&m_key, destruct))
+    int error = pthread_key_create(&m_key, destruct);
+    if (error)
         CRASH();
 }
 
index 6788f15..2a63267 100644 (file)
@@ -1,3 +1,16 @@
+2016-12-08  David Kilzer  <ddkilzer@apple.com>
+
+        Always check the return value of pthread_key_create()
+        <https://webkit.org/b/165274>
+
+        Reviewed by Darin Adler.
+
+        * platform/ios/wak/WebCoreThread.mm:
+        (InitThreadContextKey): Call CRASH() if pthread_key_create()
+        returns an error.  The error code will be stored in a register
+        available in a crash log, so no need to log the value
+        explicitly.
+
 2016-12-08  Alex Christensen  <achristensen@webkit.org>
 
         Reduce PassRefPtr use in platform/graphics
index 3eb0cd6..a92f613 100644 (file)
@@ -620,7 +620,9 @@ static void FreeThreadContext(void *threadContext)
 
 static void InitThreadContextKey()
 {
-    pthread_key_create(&threadContextKey, FreeThreadContext);
+    int error = pthread_key_create(&threadContextKey, FreeThreadContext);
+    if (error)
+        CRASH();
 }
 
 static WebThreadContext *CurrentThreadContext(void)
index 72169ab..ab92f94 100644 (file)
@@ -1,3 +1,16 @@
+2016-12-08  David Kilzer  <ddkilzer@apple.com>
+
+        Always check the return value of pthread_key_create()
+        <https://webkit.org/b/165274>
+
+        Reviewed by Darin Adler.
+
+        * bmalloc/PerThread.h:
+        (bmalloc::PerThreadStorage::init): Call BCRASH() if
+        pthread_key_create() returns an error.  The error code will be
+        stored in a register available in a crash log, so no need to log
+        the value explicitly.
+
 2016-12-06  Alexey Proskuryakov  <ap@apple.com>
 
         Correct SDKROOT values in xcconfig files
index 30a6bb2..3fe1568 100644 (file)
@@ -97,7 +97,9 @@ template<typename T> struct PerThreadStorage {
     static void init(void* object, void (*destructor)(void*))
     {
         std::call_once(s_onceFlag, [destructor]() {
-            pthread_key_create(&s_key, destructor);
+            int error = pthread_key_create(&s_key, destructor);
+            if (error)
+                BCRASH();
             s_didInitialize = true;
         });
         pthread_setspecific(s_key, object);