You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by ve...@apache.org on 2011/10/18 14:35:59 UTC

svn commit: r1185624 - in /incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu: include/capu/os/arch/Linux/Thread.inc test/os/ThreadTest.cpp

Author: veithm
Date: Tue Oct 18 12:35:59 2011
New Revision: 1185624

URL: http://svn.apache.org/viewvc?rev=1185624&view=rev
Log:
ETCH-140 EtchThread Fix

Fixed join implementation which caused Segmentation Fault on some linux
versions

Modified:
    incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/Thread.inc
    incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/ThreadTest.cpp

Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/Thread.inc
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/Thread.inc?rev=1185624&r1=1185623&r2=1185624&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/Thread.inc (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/Thread.inc Tue Oct 18 12:35:59 2011
@@ -73,7 +73,11 @@ inline Thread::~Thread()
 
 inline status_t Thread::join ()
 {
+  if (mThread == 0) {
+    return CAPU_ERROR;
+  }
   if(pthread_join(mThread,NULL) == 0) {
+    mThread = 0;
     return CAPU_OK;
   }
   else {

Modified: incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/ThreadTest.cpp
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/ThreadTest.cpp?rev=1185624&r1=1185623&r2=1185624&view=diff
==============================================================================
--- incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/ThreadTest.cpp (original)
+++ incubator/etch/trunk/binding-cpp/runtime/lib/capu/modules/capu/test/os/ThreadTest.cpp Tue Oct 18 12:35:59 2011
@@ -37,11 +37,28 @@ class ThreadTest
         variable = *val;
     }
 };
+
+class ThreadTest2
+{
+  public:
+   
+    ThreadTest2()
+    {
+    }
+
+    inline void operator()(void * param)
+    {
+      return;
+    }
+};
+
+
 capu::int32_t ThreadTest::variable;
 
 TEST(Thread,startAndJoinTest)
 {
     ThreadTest _test;
+    ThreadTest2 _test2;
     capu::int32_t newval = 6;
     //CREATE THREAD
     capu::Thread * CAPU_thread = new capu::Thread(&_test,(void *)&newval);
@@ -50,8 +67,23 @@ TEST(Thread,startAndJoinTest)
     //CHECK THE VALUE CALCULATED IN THREAD
     EXPECT_TRUE(ThreadTest::variable == newval);
     delete CAPU_thread;
+    capu::Thread * CAPU_thread2 = new capu::Thread(&_test2,NULL);
+    EXPECT_TRUE(CAPU_thread2->join()==capu::CAPU_OK);
+    delete CAPU_thread2;
+}
+
+TEST(Thread,startAndDestructorTest)
+{
+    ThreadTest _test;
+    capu::int32_t newval = 6;
+
+    capu::Thread * CAPU_thread = new capu::Thread(&_test,(void *)&newval);
+    delete CAPU_thread;
+
+    EXPECT_TRUE(ThreadTest::variable == newval);
 }
 
+
 TEST(Thread,sleepTest)
 {
     capu::int32_t newval=5;
@@ -72,4 +104,4 @@ TEST(Thread,contextTest)
         capu::Thread thread(&_test,(void*)&newval);
     }
     EXPECT_TRUE(ThreadTest::variable == newval);
-}
\ No newline at end of file
+}