diff --git a/acinclude.m4 b/acinclude.m4
index 4f2ad8daf91154b74e431fd9a0fab6fcbe0cc0b3..d7e22332655cee85c2c47f79810a022ce790116e 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1624,7 +1624,12 @@ AC_DEFUN([MYSQL_CHECK_NDB_OPTIONS], [
   --without-ndb-debug   Disable special ndb debug features],
               [ndb_debug="$withval"],
               [ndb_debug="default"])
-                                                                                
+  AC_ARG_WITH([ndb-ccflags],
+              [
+  --with-ndb-ccflags    Extra CC options for ndb compile],
+              [ndb_cxxflags_fix="$ndb_cxxflags_fix $withval"],
+              [ndb_cxxflags_fix=$ndb_cxxflags_fix])
+
   AC_MSG_CHECKING([for NDB Cluster options])
   AC_MSG_RESULT([])
                                                                                 
diff --git a/include/my_global.h b/include/my_global.h
index 3263d079853ddfcfbb18cecf6833f10112388b5e..7ca3d5e1e585cc87e6729bc798787b77481656da 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -135,7 +135,13 @@
 #ifdef HAVE_UNIXWARE7_THREADS
 #include <thread.h>
 #else
+#if defined(HPUX10) || defined(HPUX11)
+C_MODE_START			/* HPUX needs this, signal.h bug */
+#include <pthread.h>
+C_MODE_END
+#else
 #include <pthread.h>		/* AIX must have this included first */
+#endif
 #endif /* HAVE_UNIXWARE7_THREADS */
 #endif /* HAVE_mit_thread */
 #if !defined(SCO) && !defined(_REENTRANT)
diff --git a/ndb/include/portlib/NdbThread.h b/ndb/include/portlib/NdbThread.h
index 212f7de9384448b7c5c175ca3ae7d38ce800738d..e86deee43547cd41e6f10fae60f2203ea267bd33 100644
--- a/ndb/include/portlib/NdbThread.h
+++ b/ndb/include/portlib/NdbThread.h
@@ -76,7 +76,7 @@ int NdbThread_WaitFor(struct NdbThread* p_wait_thread, void** status);
  *   
  * *  status: exit code
  */
-void NdbThread_Exit(int status);
+void NdbThread_Exit(void *status);
 
 /**
  * Set thread concurrency level
diff --git a/ndb/src/common/portlib/NdbPortLibTest.cpp b/ndb/src/common/portlib/NdbPortLibTest.cpp
index 55b9ccec5f2f29d1d83eda56f9ec253d36ed9112..d7892411851d31395eda8001c3a07d4a433b24ac 100644
--- a/ndb/src/common/portlib/NdbPortLibTest.cpp
+++ b/ndb/src/common/portlib/NdbPortLibTest.cpp
@@ -54,10 +54,7 @@ extern "C"  void* thread1func(void* arg)
   if (arg1 != 7)
     fail("TEST1", "Wrong arg");
 
-  NdbThread_Exit(returnvalue);
-
-  return NULL;
-  
+  return returnvalue;
 }
 
 // test 2 variables and funcs
@@ -80,10 +77,7 @@ extern "C" void* test2func(void* arg)
     fail("TEST2", "Failed to unlock mutex");
 
   int returnvalue = arg1;
-  NdbThread_Exit(returnvalue);
-
-  return NULL;
-  
+  return returnvalue;
 }
 
 
@@ -129,8 +123,7 @@ extern "C" void* testfunc(void* arg)
     }
   while(tmpVar<100);
   
-  NdbThread_Exit(0);
-  return NULL;
+  return 0;
 }
 
 extern "C" void* testTryLockfunc(void* arg)
@@ -169,8 +162,7 @@ extern "C" void* testTryLockfunc(void* arg)
     }
   while(tmpVar<100);
   
-  NdbThread_Exit(0);
-  return NULL;
+  return 0;
 }
 
 
diff --git a/ndb/src/common/portlib/NdbThread.c b/ndb/src/common/portlib/NdbThread.c
index 5f2e6021c43127d404382b07f0f454653582f0aa..aaee9b450695051b9c296b53f34508b576cc30bd 100644
--- a/ndb/src/common/portlib/NdbThread.c
+++ b/ndb/src/common/portlib/NdbThread.c
@@ -17,7 +17,7 @@
 
 #include <ndb_global.h>
 #include <NdbThread.h>
-#include <pthread.h>
+#include <my_pthread.h>
 #include <NdbMem.h>
 
 #define MAX_THREAD_NAME 16
@@ -39,21 +39,28 @@ struct NdbThread
 static
 void*
 ndb_thread_wrapper(void* _ss){
-  void * ret;
-  struct NdbThread * ss = (struct NdbThread *)_ss;
-  DBUG_ENTER("ndb_thread_wrapper");
-#ifdef NDB_SHM_TRANSPORTER
-  if (g_ndb_shm_signum)
+  my_thread_init();
   {
-    sigset_t mask;
-    DBUG_PRINT("info",("Block signum %d",g_ndb_shm_signum));
-    sigemptyset(&mask);
-    sigaddset(&mask, g_ndb_shm_signum);
-    pthread_sigmask(SIG_BLOCK, &mask, 0);
-  }
+    DBUG_ENTER("ndb_thread_wrapper");
+#ifdef NDB_SHM_TRANSPORTER
+    if (g_ndb_shm_signum)
+    {
+      sigset_t mask;
+      DBUG_PRINT("info",("Block signum %d",g_ndb_shm_signum));
+      sigemptyset(&mask);
+      sigaddset(&mask, g_ndb_shm_signum);
+      pthread_sigmask(SIG_BLOCK, &mask, 0);
+    }
 #endif
-  ret= (* ss->func)(ss->object);
-  DBUG_RETURN(ret);
+    {
+      void *ret;
+      struct NdbThread * ss = (struct NdbThread *)_ss;
+      ret= (* ss->func)(ss->object);
+      NdbThread_Exit(ret);
+    }
+  /* will never be reached */
+    DBUG_RETURN(0);
+  }
 }
 
 
@@ -130,9 +137,10 @@ int NdbThread_WaitFor(struct NdbThread* p_wait_thread, void** status)
 }
 
 
-void NdbThread_Exit(int status)
+void NdbThread_Exit(void *status)
 {
-  pthread_exit(&status);
+  my_thread_end();
+  pthread_exit(status);
 }
 
 
diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp
index 462cde76740894b75defe6864a84850329b538e8..439730435ec8ed97f4610df34860675fea734741 100644
--- a/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -1104,11 +1104,8 @@ TransporterRegistry::setIOState(NodeId nodeId, IOState state) {
 static void * 
 run_start_clients_C(void * me)
 {
-  my_thread_init();
   ((TransporterRegistry*) me)->start_clients_thread();
-  my_thread_end();
-  NdbThread_Exit(0);
-  return me;
+  return 0;
 }
 
 // Run by kernel thread
diff --git a/ndb/src/common/util/SocketServer.cpp b/ndb/src/common/util/SocketServer.cpp
index 8bee256684de00d056ff0ff2cb3901f69ee69dc0..da06389b5dfa1fd91a7b31ffc73654615716093d 100644
--- a/ndb/src/common/util/SocketServer.cpp
+++ b/ndb/src/common/util/SocketServer.cpp
@@ -186,11 +186,7 @@ extern "C"
 void* 
 socketServerThread_C(void* _ss){
   SocketServer * ss = (SocketServer *)_ss;
-  
-  my_thread_init();
   ss->doRun();
-  my_thread_end();  
-  NdbThread_Exit(0);
   return 0;
 }
 
@@ -309,11 +305,8 @@ void*
 sessionThread_C(void* _sc){
   SocketServer::Session * si = (SocketServer::Session *)_sc;
 
-  my_thread_init();
   if(!transfer(si->m_socket)){
     si->m_stopped = true;
-    my_thread_end();
-    NdbThread_Exit(0);
     return 0;
   }
   
@@ -325,8 +318,6 @@ sessionThread_C(void* _sc){
   }
   
   si->m_stopped = true;
-  my_thread_end();
-  NdbThread_Exit(0);
   return 0;
 }
 
diff --git a/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp b/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
index ad6c0fd52838cd1651dea0839ce12086febe8ffb..f76440a462acf23502fa1084427bbf543ce65c9e 100644
--- a/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
+++ b/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
@@ -82,7 +82,6 @@ static int numAsyncFiles = 0;
 
 extern "C" void * runAsyncFile(void* arg)
 {
-  my_thread_init();
   ((AsyncFile*)arg)->run();
   return (NULL);
 }
@@ -876,8 +875,6 @@ void AsyncFile::endReq()
 {
   // Thread is ended with return
   if (theWriteBuffer) NdbMem_Free(theWriteBuffer);
-  my_thread_end();
-  NdbThread_Exit(0);
 }
 
 
diff --git a/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/MemoryChannelTest.cpp b/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/MemoryChannelTest.cpp
index aeab9f7828d9551109e123f3a8b1ce10e012421a..b98c60693f4c70a4e29345bb928e3a62e1b6df42 100644
--- a/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/MemoryChannelTest.cpp
+++ b/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/MemoryChannelTest.cpp
@@ -40,7 +40,6 @@ extern "C" void* runProducer(void*arg)
         NdbSleep_MilliSleep(i);
       i++;
     }
-  NdbThread_Exit(0);
   return NULL;
 }
 
@@ -58,7 +57,6 @@ extern "C" void* runConsumer(void* arg)
       delete p;
       
     }
-  NdbThread_Exit(0);
   return NULL;
 }
 
@@ -92,7 +90,6 @@ extern "C" void* runProducer2(void*arg)
       NdbSleep_MilliSleep(i);
       i++;
     }
-  NdbThread_Exit(0);
   return NULL;
 }
 
@@ -111,7 +108,6 @@ extern "C" void* runConsumer2(void* arg)
       delete p;
     }
   ndbout << "Consumer2: " << count << " received" << endl;
-  NdbThread_Exit(0);
   return NULL;
 }
 
diff --git a/ndb/src/kernel/vm/WatchDog.cpp b/ndb/src/kernel/vm/WatchDog.cpp
index 4e07dc1df90ddc3ca57d8dd4c2cd08f792c73be0..23475a478d3ed181fbd37e3bfa09309915870190 100644
--- a/ndb/src/kernel/vm/WatchDog.cpp
+++ b/ndb/src/kernel/vm/WatchDog.cpp
@@ -27,10 +27,7 @@
 extern "C" 
 void* 
 runWatchDog(void* w){
-  my_thread_init();
   ((WatchDog*)w)->run();
-  my_thread_end();
-  NdbThread_Exit(0);
   return NULL;
 }
 
diff --git a/ndb/src/mgmclient/CommandInterpreter.cpp b/ndb/src/mgmclient/CommandInterpreter.cpp
index cbf7776fe06ab61c1fe7f9b6a8d9254827fa1094..025bed2bc09cb1f595ebe62a9cfb1a223f546c3a 100644
--- a/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -457,8 +457,6 @@ event_thread_run(void* m)
 {
   NdbMgmHandle handle= *(NdbMgmHandle*)m;
 
-  my_thread_init();
-
   int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0 };
   int fd = ndb_mgm_listen_event(handle, filter);
   if (fd > 0)
@@ -478,9 +476,7 @@ event_thread_run(void* m)
     do_event_thread= -1;
   }
 
-  my_thread_end();
-  NdbThread_Exit(0);
-  return 0;
+  return NULL;
 }
 
 bool
diff --git a/ndb/src/mgmsrv/ConfigInfo.cpp b/ndb/src/mgmsrv/ConfigInfo.cpp
index 9be4af1b9b52e05cb487957d0ea704dbcbdcc8af..07310e3a8b87157d58f0da802f3bca15516efd6b 100644
--- a/ndb/src/mgmsrv/ConfigInfo.cpp
+++ b/ndb/src/mgmsrv/ConfigInfo.cpp
@@ -3192,13 +3192,27 @@ fixShmKey(InitConfigFileParser::Context & ctx, const char *)
 {
   DBUG_ENTER("fixShmKey");
   {
+    static int last_signum= -1;
     Uint32 signum;
     if(!ctx.m_currentSection->get("Signum", &signum))
     {
       signum= OPT_NDB_SHM_SIGNUM_DEFAULT;
+      if (signum <= 0)
+      {
+	  ctx.reportError("Unable to set default parameter for [SHM]Signum"
+			  " please specify [SHM DEFAULT]Signum");
+	  return false;
+      }
       ctx.m_currentSection->put("Signum", signum);
       DBUG_PRINT("info",("Added Signum=%u", signum));
     }
+    if ( last_signum != (int)signum && last_signum >= 0 )
+    {
+      ctx.reportError("All shared memory transporters must have same [SHM]Signum defined."
+		      " Use [SHM DEFAULT]Signum");
+      return false;
+    }
+    last_signum= (int)signum;
   }
   {
     Uint32 id1= 0, id2= 0, key= 0;
diff --git a/ndb/src/mgmsrv/MgmtSrvr.cpp b/ndb/src/mgmsrv/MgmtSrvr.cpp
index f698099141aa22010d055b36a3576f35cddd904b..66c9a6448aaa77b0125e28e1afb8befc957155c0 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -70,12 +70,7 @@ void *
 MgmtSrvr::logLevelThread_C(void* m)
 {
   MgmtSrvr *mgm = (MgmtSrvr*)m;
-  my_thread_init();
   mgm->logLevelThreadRun();
-  
-  my_thread_end();
-  NdbThread_Exit(0);
-  /* NOTREACHED */
   return 0;
 }
 
@@ -83,12 +78,7 @@ void *
 MgmtSrvr::signalRecvThread_C(void *m) 
 {
   MgmtSrvr *mgm = (MgmtSrvr*)m;
-  my_thread_init();
   mgm->signalRecvThreadRun();
-
-  my_thread_end();
-  NdbThread_Exit(0);
-  /* NOTREACHED */
   return 0;
 }
 
diff --git a/ndb/src/ndbapi/ClusterMgr.cpp b/ndb/src/ndbapi/ClusterMgr.cpp
index e10b2e1d82ca3da5324f2995ddbbdda17e5be8ca..1fe0cedbd6c579590913430b82822666a2be9e51 100644
--- a/ndb/src/ndbapi/ClusterMgr.cpp
+++ b/ndb/src/ndbapi/ClusterMgr.cpp
@@ -54,7 +54,6 @@ runClusterMgr_C(void * me)
 #ifdef NDB_OSE
   NdbSleep_MilliSleep(50);
 #endif
-  NdbThread_Exit(0); 
   return NULL;
 }
 
@@ -560,10 +559,7 @@ extern "C"
 void*
 runArbitMgr_C(void* me)
 {
-  my_thread_init();
   ((ArbitMgr*) me)->threadMain();
-  my_thread_end();
-  NdbThread_Exit(0); 
   return NULL;
 }
 
diff --git a/ndb/src/ndbapi/TransporterFacade.cpp b/ndb/src/ndbapi/TransporterFacade.cpp
index 031ee6315e87eb15cd7852b0cd4ffdd21f575e0c..5582143be448567519de74d8fc84d67bfbbd951c 100644
--- a/ndb/src/ndbapi/TransporterFacade.cpp
+++ b/ndb/src/ndbapi/TransporterFacade.cpp
@@ -405,11 +405,8 @@ extern "C"
 void* 
 runSendRequest_C(void * me)
 {
-  my_thread_init();
   ((TransporterFacade*) me)->threadMainSend();
-  my_thread_end();
-  NdbThread_Exit(0);
-  return me;
+  return 0;
 }
 
 void TransporterFacade::threadMainSend(void)
@@ -443,11 +440,8 @@ extern "C"
 void* 
 runReceiveResponse_C(void * me)
 {
-  my_thread_init();
   ((TransporterFacade*) me)->threadMainReceive();
-  my_thread_end();
-  NdbThread_Exit(0);
-  return me;
+  return 0;
 }
 
 void TransporterFacade::threadMainReceive(void)
diff --git a/ndb/src/ndbapi/ndb_cluster_connection.cpp b/ndb/src/ndbapi/ndb_cluster_connection.cpp
index 5df707e211d2100f453d4cecafb0e66ffb214f9c..ab32d6abb8e43f518ebb1550119a7c6cb4a615e5 100644
--- a/ndb/src/ndbapi/ndb_cluster_connection.cpp
+++ b/ndb/src/ndbapi/ndb_cluster_connection.cpp
@@ -87,11 +87,8 @@ const char *Ndb_cluster_connection::get_connectstring(char *buf,
 
 extern "C" pthread_handler_decl(run_ndb_cluster_connection_connect_thread, me)
 {
-  my_thread_init();
   g_run_connect_thread= 1;
   ((Ndb_cluster_connection_impl*) me)->connect_thread();
-  my_thread_end();
-  NdbThread_Exit(0);
   return me;
 }
 
diff --git a/ndb/test/ndbapi/benchronja.cpp b/ndb/test/ndbapi/benchronja.cpp
index 91b2a041186d30c831424919f6dbee3007d734fd..a7523e8e416c23b31bbbae2eeaf4a4ad557139db 100644
--- a/ndb/test/ndbapi/benchronja.cpp
+++ b/ndb/test/ndbapi/benchronja.cpp
@@ -984,7 +984,6 @@ void* ThreadExec(void* ThreadData){
 		delete pMyNdb;
 		pMyNdb = NULL ;
 		ThreadReady[thread_no] = 1;
-		NdbThread_Exit(0) ;
 		return 0 ;
     }//if
 
@@ -1197,7 +1196,6 @@ void* ThreadExec(void* ThreadData){
   } // for(;;)
   
   delete pMyNdb ;
-  NdbThread_Exit(0) ;
-  return 0 ; // Compiler is happy now
+  return 0 ;
 }
 
diff --git a/ndb/test/ndbapi/flexAsynch.cpp b/ndb/test/ndbapi/flexAsynch.cpp
index 1953444d640ec9cb881c689e85a95b10a8cd9eca..4b87b2c70ed6e9366c5af02aad616d0383106d2d 100644
--- a/ndb/test/ndbapi/flexAsynch.cpp
+++ b/ndb/test/ndbapi/flexAsynch.cpp
@@ -494,8 +494,7 @@ threadLoop(void* ThreadData)
   delete localNdb;
   ThreadReady[threadNo] = 1;
 
-  NdbThread_Exit(0);
-  return NULL; // Just to keep compiler happy
+  return NULL;
 }//threadLoop()
 
 static 
diff --git a/ndb/test/ndbapi/flexBench.cpp b/ndb/test/ndbapi/flexBench.cpp
index 2a2388109a1b52d977285a5ba094c1d718b5222d..cc2bfb391da768d798b21d0f81b26e580eb1e820 100644
--- a/ndb/test/ndbapi/flexBench.cpp
+++ b/ndb/test/ndbapi/flexBench.cpp
@@ -617,7 +617,7 @@ static void* flexBenchThread(void* pArg)
     free(attrRefValue) ;
     free(pOps) ;
     delete pNdb ;
-    NdbThread_Exit(0) ;
+    return 0; // thread exits
   }
   
   pNdb->init();
@@ -934,8 +934,7 @@ static void* flexBenchThread(void* pArg)
     free(longKeyAttrValue);
   } // if
 
-  NdbThread_Exit(0);
-  return NULL; // Just to keep compiler happy
+  return NULL; // Thread exits
 }
 
 
diff --git a/ndb/test/ndbapi/flexHammer.cpp b/ndb/test/ndbapi/flexHammer.cpp
index 688e70d501ae6ee6a74990a9863c6e812445acb7..13cd2d5e561137e1adaa50c6f2f447f31b50eaaa 100644
--- a/ndb/test/ndbapi/flexHammer.cpp
+++ b/ndb/test/ndbapi/flexHammer.cpp
@@ -612,10 +612,7 @@ flexHammerThread(void* pArg)
 
   flexHammerErrorData->resetErrorCounters();
 
-  // And exit using NDBT
-  NdbThread_Exit(0);
-
-  return  NULL;
+  return  NULL; // thread exits
   
 } // flexHammerThread
 
diff --git a/ndb/test/ndbapi/flexScan.cpp b/ndb/test/ndbapi/flexScan.cpp
index c7f4041a525336cc15fa4714ec71652a29b15123..4d2c85d6955b27a7b75e4b54883bc6377e3761cb 100644
--- a/ndb/test/ndbapi/flexScan.cpp
+++ b/ndb/test/ndbapi/flexScan.cpp
@@ -701,8 +701,7 @@ flexScanThread(void* ThreadData)
     free(pkValue);
   } // if
   
-  NdbThread_Exit(0);
-  return NULL;
+  return NULL; // thread exits
 
 } // flexScanThread
 
diff --git a/ndb/test/ndbapi/flexTT.cpp b/ndb/test/ndbapi/flexTT.cpp
index 3b976f9f87e70252f9595a2ce4cd85848ed96736..8d5be2bb39901ff72ab9d3fb335a05b25fcbfeef 100644
--- a/ndb/test/ndbapi/flexTT.cpp
+++ b/ndb/test/ndbapi/flexTT.cpp
@@ -389,8 +389,7 @@ threadLoop(void* ThreadData)
   delete localNdb;
   ThreadReady[loc_threadNo] = 1;
 
-  NdbThread_Exit(0);
-  return NULL; // Just to keep compiler happy
+  return NULL; // Thread exits
 }//threadLoop()
 
 static 
diff --git a/ndb/test/ndbapi/flexTimedAsynch.cpp b/ndb/test/ndbapi/flexTimedAsynch.cpp
index 27380cc79fd7a714e6a99cdb870f6a3bae1c016c..2b8c0bdd5f89ab6f189d4d9e30e34c45571fa243 100644
--- a/ndb/test/ndbapi/flexTimedAsynch.cpp
+++ b/ndb/test/ndbapi/flexTimedAsynch.cpp
@@ -406,9 +406,8 @@ threadLoop(void* ThreadData)
 
   delete localNdb;
   ThreadReady[threadNo] = 1;
-  NdbThread_Exit(0);
 
-  return NULL;
+  return NULL; // thread exits
 }
 
 void executeThread(StartType aType, Ndb* aNdbObject, ThreadNdb* threadInfo)
diff --git a/ndb/test/ndbapi/flex_bench_mysql.cpp b/ndb/test/ndbapi/flex_bench_mysql.cpp
index c8d4d85bedf384f523d85a9ede2e16d49d7f1632..c15175bfb00edbfffa076f8ee8739816fae08791 100644
--- a/ndb/test/ndbapi/flex_bench_mysql.cpp
+++ b/ndb/test/ndbapi/flex_bench_mysql.cpp
@@ -710,7 +710,7 @@ static void* flexBenchThread(void* pArg)
 			    the_socket_name,
 			    0) == NULL ) {
       ndbout << "failed" << endl;
-      NdbThread_Exit(0) ;
+      return 0;
     }
     ndbout << "ok" << endl;
 
@@ -722,7 +722,7 @@ static void* flexBenchThread(void* pArg)
 
     if (r) {
       ndbout << "autocommit on/off failed" << endl;
-      NdbThread_Exit(0) ;
+      return 0;
     }
   }
 #endif
@@ -741,7 +741,7 @@ static void* flexBenchThread(void* pArg)
     ndbout << threadNo << endl ;
     ndbout << "Thread #" << threadNo << " will now exit" << endl ;
     tResult = 13 ;
-    NdbThread_Exit(0) ;
+    return 0;
   }
   
   if (use_ndb) {
@@ -750,7 +750,7 @@ static void* flexBenchThread(void* pArg)
       ndbout << "Failed to get an NDB object" << endl;
       ndbout << "Thread #" << threadNo << " will now exit" << endl ;
       tResult = 13;
-      NdbThread_Exit(0) ;
+      return 0;
     }
     pNdb->waitUntilReady();
     return_ndb_object(pNdb, ndb_id);
@@ -900,11 +900,11 @@ static void* flexBenchThread(void* pArg)
       prep_insert[i] = mysql_prepare(&mysql, buf, pos);
       if (prep_insert[i] == 0) {
 	ndbout << "mysql_prepare: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
       if (mysql_bind_param(prep_insert[i], bind_insert)) {
 	ndbout << "mysql_bind_param: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
     }
     
@@ -926,11 +926,11 @@ static void* flexBenchThread(void* pArg)
       prep_update[i] = mysql_prepare(&mysql, buf, pos);
       if (prep_update[i] == 0) {
 	ndbout << "mysql_prepare: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
       if (mysql_bind_param(prep_update[i], bind_update)) {
 	ndbout << "mysql_bind_param: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
     }
     
@@ -953,15 +953,15 @@ static void* flexBenchThread(void* pArg)
       prep_read[i] = mysql_prepare(&mysql, buf, pos);
       if (prep_read[i] == 0) {
 	ndbout << "mysql_prepare: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
       if (mysql_bind_param(prep_read[i], bind_read)) {
 	ndbout << "mysql_bind_param: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
       if (mysql_bind_result(prep_read[i], &bind_read[1])) {
 	ndbout << "mysql_bind_result: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
     }
     
@@ -978,11 +978,11 @@ static void* flexBenchThread(void* pArg)
       prep_delete[i] = mysql_prepare(&mysql, buf, pos);
       if (prep_delete[i] == 0) {
 	ndbout << "mysql_prepare: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
       if (mysql_bind_param(prep_delete[i], bind_delete)) {
 	ndbout << "mysql_bind_param: " << mysql_error(&mysql) << endl;
-	NdbThread_Exit(0) ;
+	return 0;
       }
     }
   }
@@ -1431,8 +1431,7 @@ static void* flexBenchThread(void* pArg)
     ndbout << "I got here " << endl;
     return_ndb_object(pNdb, ndb_id);
   }
-  NdbThread_Exit(0);
-  return NULL; // Just to keep compiler happy
+  return NULL;
 }
 
 
diff --git a/ndb/test/ndbapi/mainAsyncGenerator.cpp b/ndb/test/ndbapi/mainAsyncGenerator.cpp
index 16cb50e160f10c2d9150f40a78a428877133fcbb..73a8b98ab57d78fa811644ec10cecca1a5a671bd 100644
--- a/ndb/test/ndbapi/mainAsyncGenerator.cpp
+++ b/ndb/test/ndbapi/mainAsyncGenerator.cpp
@@ -274,8 +274,6 @@ threadRoutine(void *arg)
 
   asyncDbDisconnect(pNDB);
 
-  NdbThread_Exit(0);
-
   return NULL;
 }
 
diff --git a/ndb/test/src/NDBT_Test.cpp b/ndb/test/src/NDBT_Test.cpp
index bbbde008938b7e342bfda2170938470d4cc258ef..17e46bf33e50fb118f8ba9a37a771571059e3075 100644
--- a/ndb/test/src/NDBT_Test.cpp
+++ b/ndb/test/src/NDBT_Test.cpp
@@ -475,7 +475,6 @@ void *
 runStep_C(void * s)
 {
   runStep(s);
-  NdbThread_Exit(0);
   return NULL;
 }
 
diff --git a/ndb/test/tools/transproxy.cpp b/ndb/test/tools/transproxy.cpp
index 88267801172893eea172266144e77fb9c7c7a360..28a621fa584fff956a3f97bc5f24e9b267674d44 100644
--- a/ndb/test/tools/transproxy.cpp
+++ b/ndb/test/tools/transproxy.cpp
@@ -291,7 +291,6 @@ extern "C" void*
 copyrun_C(void* copy)
 {
     ((Copy*) copy)->run();
-    NdbThread_Exit(0);
     return 0;
 }
 
@@ -322,7 +321,6 @@ extern "C" void*
 connrun_C(void* conn)
 {
     ((Conn*) conn)->run();
-    NdbThread_Exit(0);
     return 0;
 }