use strict;
# Currently only testing the reset of patterns.
-plan tests => 20;
+plan tests => 24;
package aiieee;
CLINK::reset_ZZIP();
is(CLINK::ZZIP("ZZIP"), 1, "match matches after reset");
is(CLINK::ZZIP(""), 0, "mismatch doesn't match");
+
+
+undef $/;
+my $prog = <DATA>;
+
+SKIP:
+{
+ eval {require threads; 1} or
+ skip "No threads", 4;
+ local $::TODO
+ = "Currently performs a read from free()d memory, and may crash";
+ foreach my $eight ('/', '?') {
+ foreach my $nine ('/', '?') {
+ my $copy = $prog;
+ $copy =~ s/8/$eight/gm;
+ $copy =~ s/9/$nine/gm;
+ fresh_perl_is($copy, "pass", "",
+ "first pattern $eight$eight, second $nine$nine");
+ }
+ }
+}
+
+__DATA__
+#!perl
+use warnings;
+use strict;
+
+# Note that there are no digits in this program, other than the placeholders
+sub a {
+8one8;
+}
+sub b {
+9two9;
+}
+
+use threads;
+use threads::shared;
+
+sub wipe {
+ eval 'no warnings; sub b {}';
+}
+
+sub lock_then_wipe {
+ my $l_r = shift;
+ lock $$l_r;
+ cond_wait($$l_r) until $$l_r eq "B";
+ wipe;
+ $$l_r = "C";
+ cond_signal $$l_r;
+}
+
+my $lock : shared = "A";
+my $r = \$lock;
+
+my $t;
+{
+ lock $$r;
+ $t = threads->new(\&lock_then_wipe, $r);
+ wipe;
+ $lock = "B";
+ cond_signal $lock;
+}
+
+{
+ lock $lock;
+ cond_wait($lock) until $lock eq "C";
+ reset;
+}
+
+$t->join;
+print "pass\n";