Index: /trunk/include/iprt/mangling.h
===================================================================
--- /trunk/include/iprt/mangling.h	(revision 92506)
+++ /trunk/include/iprt/mangling.h	(revision 92507)
@@ -2512,4 +2512,5 @@
 # define RTThreadIsSelfKnown                            RT_MANGLER(RTThreadIsSelfKnown)
 # define RTThreadNativeSelf                             RT_MANGLER(RTThreadNativeSelf)
+# define RTThreadControlPokeSignal                      RT_MANGLER(RTThreadControlPokeSignal) /* not-win not-os2 */
 # define RTThreadPoke                                   RT_MANGLER(RTThreadPoke) /* not-win not-os2 */
 # define RTThreadPreemptDisable                         RT_MANGLER(RTThreadPreemptDisable)     /* r0drv */
Index: /trunk/include/iprt/thread.h
===================================================================
--- /trunk/include/iprt/thread.h	(revision 92506)
+++ /trunk/include/iprt/thread.h	(revision 92507)
@@ -530,4 +530,18 @@
  */
 RTDECL(int) RTThreadPoke(RTTHREAD hThread);
+
+/**
+ * Controls the masking of the signal used by RTThreadPoke on posix systems.
+ *
+ * This function is not available on non-posix systems.
+ *
+ * @returns IPRT status code.
+ *
+ * @param   hThread     The current thread.
+ * @param   fEnable     Whether to enable poking (unblock) or to disable it
+ *                      (block the signal).
+ */
+RTDECL(int) RTThreadControlPokeSignal(RTTHREAD hThread, bool fEnable);
+
 
 # ifdef IN_RING0
Index: /trunk/src/VBox/Runtime/r3/posix/thread-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/thread-posix.cpp	(revision 92506)
+++ /trunk/src/VBox/Runtime/r3/posix/thread-posix.cpp	(revision 92507)
@@ -641,4 +641,5 @@
 
 #ifdef RTTHREAD_POSIX_WITH_POKE
+
 RTDECL(int) RTThreadPoke(RTTHREAD hThread)
 {
@@ -659,4 +660,31 @@
     return rc;
 }
+
+
+RTDECL(int) RTThreadControlPokeSignal(RTTHREAD hThread, bool fEnable)
+{
+    AssertReturn(hThread == RTThreadSelf() && hThread != NIL_RTTHREAD, VERR_INVALID_PARAMETER);
+    int rc;
+    if (g_iSigPokeThread != -1)
+    {
+        sigset_t SigSet;
+        sigemptyset(&SigSet);
+        sigaddset(&SigSet, g_iSigPokeThread);
+
+        int rc2 = sigprocmask(fEnable ? SIG_UNBLOCK : SIG_BLOCK, &SigSet, NULL);
+        if (rc2 == 0)
+            rc = VINF_SUCCESS;
+        else
+        {
+            rc = RTErrConvertFromErrno(errno);
+            AssertMsgFailed(("rc=%Rrc errno=%d (rc2=%d)\n", rc, errno, rc2));
+        }
+    }
+    else
+        rc = VERR_NOT_SUPPORTED;
+    return rc;
+}
+
+
 #endif
 
