diff --git a/configure.in b/configure.in
index 5366254fc4c86530de42a6db287d7bcd3765de1a..ec1a4615fa8c20a3b0bd15149178330c920cba94 100644
--- a/configure.in
+++ b/configure.in
@@ -1922,7 +1922,7 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
   pthread_key_delete pthread_rwlock_rdlock pthread_setprio \
   pthread_setprio_np pthread_setschedparam pthread_sigmask readlink \
   realpath rename rint rwlock_init setupterm \
-  shmget shmat shmdt shmctl sigaction \
+  shmget shmat shmdt shmctl sigaction sigemptyset sigaddset \
   sighold sigset sigthreadmask \
   snprintf socket stpcpy strcasecmp strerror strnlen strpbrk strstr strtol \
   strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr)
@@ -2709,7 +2709,10 @@ if test "$ac_cv_func_shmget" = "yes" &&
    test "$ac_cv_func_shmat" = "yes" &&
    test "$ac_cv_func_shmdt" = "yes" &&
    test "$ac_cv_func_shmctl" = "yes" &&
-   test "$ac_cv_func_sigaction" = "yes"
+   test "$ac_cv_func_sigaction" = "yes" &&
+   test "$ac_cv_func_sigemptyset" = "yes" &&
+   test "$ac_cv_func_sigaddset" = "yes" &&
+   test "$ac_cv_func_pthread_sigmask" = "yes"
 then
    AC_DEFINE([NDB_SHM_TRANSPORTER], [1],
              [Including Ndb Cluster DB shared memory transporter])
diff --git a/ndb/src/common/portlib/NdbThread.c b/ndb/src/common/portlib/NdbThread.c
index d4f6617d2f536544d620fb2dc20d14fd90e02690..8cd6c30651433318f19991d2db290f43cdbd79ac 100644
--- a/ndb/src/common/portlib/NdbThread.c
+++ b/ndb/src/common/portlib/NdbThread.c
@@ -28,8 +28,24 @@ struct NdbThread
 { 
   pthread_t thread;
   char thread_name[MAX_THREAD_NAME];
+  NDB_THREAD_FUNC * func;
+  void * object;
 };
 
+static
+void*
+ndb_thread_wrapper(void* _ss){
+  void * ret;
+  struct NdbThread * ss = (struct NdbThread *)_ss;
+#ifdef NDB_SHM_TRANSPORTER
+  sigset_t mask;
+  sigemptyset(&mask);
+  sigaddset(&mask, SIGUSR1);
+  pthread_sigmask(SIG_BLOCK, &mask, 0);
+#endif
+  ret= (* ss->func)(ss->object);
+  return ret;
+}
 
 
 struct NdbThread* NdbThread_Create(NDB_THREAD_FUNC *p_thread_func,
@@ -67,10 +83,12 @@ struct NdbThread* NdbThread_Create(NDB_THREAD_FUNC *p_thread_func,
 #ifdef PTHREAD_CREATE_JOINABLE /* needed on SCO */
   pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
 #endif
+  tmpThread->func= p_thread_func;
+  tmpThread->object= p_thread_arg;
   result = pthread_create(&tmpThread->thread, 
 			  &thread_attr,
-  		          p_thread_func,
-  		          p_thread_arg);
+  		          ndb_thread_wrapper,
+  		          tmpThread);
   assert(result==0);
 
   pthread_attr_destroy(&thread_attr);
diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp
index fcc7a62d9e9cae77506146b1b69720707b2dd0d4..215b2a05f63b4e6afd09e7951d14fab246e3c13c 100644
--- a/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -157,8 +157,17 @@ TransporterRegistry::init(NodeId nodeId) {
   
   DEBUG("TransporterRegistry started node: " << localNodeId);
   
-  //  return allocateLongSignalMemoryPool(nLargeSegments);
-  return true;
+#ifdef NDB_SHM_TRANSPORTER
+  /**
+   * Make sure to block SIGUSR1
+   *   TransporterRegistry::init is run from "main" thread
+   */
+  sigset_t mask;
+  sigemptyset(&mask);
+  sigaddset(&mask, SIGUSR1);
+  pthread_sigmask(SIG_BLOCK, &mask, 0);
+#endif
+return true;
 }
 
 bool
@@ -1347,6 +1356,9 @@ TransporterRegistry::startReceiving()
 #ifdef NDB_SHM_TRANSPORTER
   m_shm_own_pid = getpid();
   struct sigaction sa;
+  sigemptyset(&sa.sa_mask);
+  sigaddset(&sa.sa_mask, SIGUSR1);
+  pthread_sigmask(SIG_UNBLOCK, &sa.sa_mask, 0);
   sa.sa_handler = shm_sig_handler;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = 0;
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index aa39af5176ecd22c90ddb5bf36e1393b30353f26..a6f7630321b4eacd86fbd7f9cad5819e50dbda7c 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -616,7 +616,7 @@ int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob)
           char *buf= m_blobs_buffer + offset;
           uint32 len= 0xffffffff;  // Max uint32
           DBUG_PRINT("value", ("read blob ptr=%x len=%u",
-                               (uint)buf, (uint)blob_len));
+                               (UintPtr)buf, (uint)blob_len));
           if (ndb_blob->readData(buf, len) != 0)
             DBUG_RETURN(-1);
           DBUG_ASSERT(len == blob_len);
@@ -3222,7 +3222,7 @@ int ha_ndbcluster::start_stmt(THD *thd)
 #if 0    
     NdbTransaction *tablock_trans= 
       (NdbTransaction*)thd->transaction.all.ndb_tid;
-    DBUG_PRINT("info", ("tablock_trans: %x", (uint)tablock_trans));
+    DBUG_PRINT("info", ("tablock_trans: %x", (UintPtr)tablock_trans));
     DBUG_ASSERT(tablock_trans);
 //    trans= ndb->hupp(tablock_trans);
 #endif