# Regexp match confused by thread

**URL:** <https://www.ruby-forum.com/t/regexp-match-confused-by-thread/135580>\
**Category:** Development\
**Created:** [April 23, 2008, 11:05am UTC](https://www.ruby-forum.com/t/regexp-match-confused-by-thread/135580 "2008-04-23T11:05:07Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [April 23, 2008, 11:05am UTC](https://www.ruby-forum.com/t/regexp-match-confused-by-thread/135580/1 "2008-04-23T11:05:07Z")

</div>

e$B0J2\<$N%W%m%0%i%`$G!"e(B$~.size e$B$O!"e(B/((ab)_(ab)_)\*b/  
e$B$K$O3g8L$,e(B  
3e$B$DF~$C$F$$$k$?$a!"e(B4 e$B$rI=\<($9$k$O$:$J$N$G$9$,!"e(B1  
e$B$,I=\<($5$le(B  
e$B$^$9!#e(B

% ./ruby -ve ’  
Thread.new { loop { // =~ “abc” } }  
sleep 1  
5.times {  
/((ab)_(ab)_)\*b/ =~ “ab”\*8  
p $~.size  
}  
’  
ruby 1.9.0 (2008-04-23 revision 16172) [i686-linux]  
1  
1  
1  
1  
1

e$B0J2\<$N$h$&$K!":G=i$K5/F0$9$k%9%l%C%I$r=|5n$9$k$H!"0U?^$I$\*$je(B  
e$B$Ke(B 4 e$B$,I=\<($5$l$k$h$&$K$J$j$^$9!#e(B

% ./ruby -ve ’  
#Thread.new { loop { // =~ “abc” } }  
sleep 1  
5.times {  
/((ab)_(ab)_)\*b/ =~ “ab”\*8  
p $~.size  
}  
’  
ruby 1.9.0 (2008-04-23 revision 16172) [i686-linux]  
4  
4  
4  
4  
4

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [April 29, 2008, 7:20am UTC](https://www.ruby-forum.com/t/regexp-match-confused-by-thread/135580/2 "2008-04-29T07:20:03Z")

</div>

e$B%o%J%Y$H?=$7$^$9!#e(B

08/04/23 e$B$Ke(B Tanaka A.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) e$B$5$s$O=q$-$^$7$?e(B:

> e$B0J2\<$N%W%m%0%i%`$G!"e(B$~.size e$B$O!"e(B/((ab)_(ab)_)\*b/ e$B$K$O3g8L$,e(B  
> 3e$B$DF~$C$F$$$k$?$a!"e(B4 e$B$rI=\<($9$k$O$:$J$N$G$9$,!"e(B1 e$B$,I=\<($5$le(B  
> e$B$^$9!#e(B

e$B$3$s$J46$8$G$I$&$G$7$g$&$+!#e(B

# Index: re.c

— re.c (revision 16218)  
+++ re.c (working copy)  
@@ -1255,7 +1255,7 @@  
{  
int result;  
VALUE match;

- static struct re\_registers regs;

- struct re\_registers regs;  
char \*range = RSTRING\_PTR(str);  
regex\_t \*reg0 = RREGEXP(re)-\>ptr, \*reg;  
int busy = FL\_TEST(re, REG\_BUSY);  
@@ -1271,6 +1271,7 @@  
if (!reverse) {  
range += RSTRING\_LEN(str);  
}
- MEMZERO(&regs, struct re\_registers, 1);  
result = onig\_search(reg,  
(UChar\*)(RSTRING\_PTR(str)),  
((UChar\*)(RSTRING\_PTR(str)) +  
RSTRING\_LEN(str)),
