+ if USE_STACKCHECK is defined, use PyOS_CheckStack to look
  for excessive recursion.
diff --git a/Modules/_sre.c b/Modules/_sre.c
index d3841d5..8add74e 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -58,7 +58,9 @@
 /* optional features */
 
 /* prevent run-away recursion (bad patterns on long strings) */
+#if !defined(USE_STACKCHECK)
 #define USE_RECURSION_LIMIT 10000
+#endif
 
 /* enables fast searching */
 #define USE_FAST_SEARCH
@@ -527,6 +529,11 @@
 
     TRACE(("%8d: enter %d\n", PTR(ptr), level));
 
+#if defined(USE_STACKCHECK)
+    if (level % 10 == 0 && PyOS_CheckStack()) {
+        return SRE_ERROR_RECURSION_LIMIT;
+#endif
+
 #if defined(USE_RECURSION_LIMIT)
     if (level > USE_RECURSION_LIMIT)
         return SRE_ERROR_RECURSION_LIMIT;