When libunwind is configured with --enable-block-signals=no,
we must block recursion via sighandlers by "external" means.
diff --git a/tests/test-async-sig.c b/tests/test-async-sig.c
index 9309076..eaa9ce9 100644
--- a/tests/test-async-sig.c
+++ b/tests/test-async-sig.c
@@ -32,6 +32,7 @@
 
 #define UNW_LOCAL_ONLY
 #include <libunwind.h>
+#include "config.h"
 
 static const int nerrors_max = 100;
 
@@ -45,6 +46,14 @@
 int nerrors;
 int sigcount;
 
+#ifndef CONFIG_BLOCK_SIGNALS
+/* When libunwind is configured with --enable-block-signals=no, the caller
+   is responsible for preventing recursion via signal handlers.
+   We use a simple global here.  In a multithreaded program, one would use
+   a thread-local variable.  */
+int recurcount;
+#endif
+
 #define panic(args...)					\
 	{ ++nerrors; fprintf (stderr, args); return; }
 
@@ -58,6 +67,12 @@
   int ret;
   int depth = 0;
 
+#ifndef CONFIG_BLOCK_SIGNALS
+  if (recurcount > 0)
+    return;
+  recurcount += 1;
+#endif
+
   unw_getcontext (&uc);
   if (unw_init_local (&cursor, &uc) < 0)
     panic ("unw_init_local failed!\n");
@@ -102,6 +117,10 @@
         }
     }
   while (ret > 0);
+
+#ifndef CONFIG_BLOCK_SIGNALS
+  recurcount -= 1;
+#endif
 }
 
 void