From 9112cf4ae7f7ea8ab33c282aa02eec812421aeab Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Thu, 24 Mar 2022 01:57:34 +0900 Subject: regint.h: Reduce the frequency of rb_thread_check_ints edc8576a65b7082597d45a694434261ec3ac0d9e checks interrupt at every backtrack, which brought significant overhead. This change makes the check only once every 128 backtracks. --- regint.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'regint.h') 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; -- cgit v1.2.1