Throw an exception when pthread_key_create fails
authorPrzemyslaw Ciezkowski <p.ciezkowski@samsung.com>
Fri, 23 Nov 2012 08:50:48 +0000 (09:50 +0100)
committerGerrit Code Review <gerrit2@kim11>
Fri, 23 Nov 2012 11:43:21 +0000 (20:43 +0900)
[Issue#] TWEB-427
[Feature] ThreadLocalVariable should not call Assert
when pthread_key_create fails
[Cause] Process gets SIGABORT when ThreadLocalVariable fails.
[Solution] Replace with exception, allow to catch it.

[Verification] Run iframes.wgt widget from wrt-extra repository.
WebProcess should not fail when counter in widget hits ~160.
Verification requires patch from plugins_common where this excepion is handled.

Change-Id: I7205afcaed091732f0233500e58d596fed1bdf4f

modules/core/include/dpl/thread.h

index 422239d..8406282 100644 (file)
@@ -234,6 +234,7 @@ public:
     public:
         DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
         DECLARE_EXCEPTION_TYPE(Base, NullReference)
+        DECLARE_EXCEPTION_TYPE(Base, KeyCreateFailed)
     };
 
 private:
@@ -310,9 +311,10 @@ public:
     ThreadLocalVariable()
     {
         int result = pthread_key_create(&m_key, &InternalDestroy);
-
-        Assert(result == 0 &&
-               "Failed to allocate thread local variable");
+        if (result != 0) {
+            ThrowMsg(typename Exception::KeyCreateFailed,
+                    "Failed to allocate thread local variable: " << result);
+        }
     }
 
     ~ThreadLocalVariable()