summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--regexec.c2
-rw-r--r--regint.h9
2 files changed, 10 insertions, 1 deletions
diff --git a/regexec.c b/regexec.c
index f6435d84c6..9535e45228 100644
--- a/regexec.c
+++ b/regexec.c
@@ -421,6 +421,7 @@ onig_region_copy(OnigRegion* to, const OnigRegion* from)
(msa).start = (arg_start);\
(msa).gpos = (arg_gpos);\
(msa).best_len = ONIG_MISMATCH;\
+ (msa).counter = 0;\
} while(0)
#else
# define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start, arg_gpos) do {\
@@ -429,6 +430,7 @@ onig_region_copy(OnigRegion* to, const OnigRegion* from)
(msa).region = (arg_region);\
(msa).start = (arg_start);\
(msa).gpos = (arg_gpos);\
+ (msa).counter = 0;\
} while(0)
#endif
diff --git a/regint.h b/regint.h
index b136d804dc..0e9777cc1e 100644
--- a/regint.h
+++ b/regint.h
@@ -148,7 +148,13 @@
#ifdef RUBY
-# define CHECK_INTERRUPT_IN_MATCH_AT rb_thread_check_ints()
+# define CHECK_INTERRUPT_IN_MATCH_AT do { \
+ msa->counter++; \
+ if (msa->counter >= 128) { \
+ msa->counter = 0; \
+ rb_thread_check_ints(); \
+ } \
+} while(0)
# define onig_st_init_table st_init_table
# define onig_st_init_table_with_size st_init_table_with_size
# define onig_st_init_numtable st_init_numtable
@@ -870,6 +876,7 @@ typedef struct {
void* state_check_buff;
int state_check_buff_size;
#endif
+ int counter;
} OnigMatchArg;