Backport svn revision 33693, fixes threading bootstrap test failure.

This commit is contained in:
jeremy 2011-11-09 19:23:35 +00:00
parent 0524946072
commit 263beca3e6
3 changed files with 39 additions and 16 deletions

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.18 2011/11/08 23:38:57 jeremy Exp $
# $OpenBSD: Makefile,v 1.19 2011/11/09 19:23:35 jeremy Exp $
COMMENT-main = object oriented script language with threads
COMMENT-gdbm = gdbm interface for ruby
@ -17,6 +17,8 @@ PKGNAME-dbm = ruby-dbm-${VERSION}.${PATCHLEVEL}
PKGNAME-tk = ruby-tk-${VERSION}.${PATCHLEVEL}
PKGNAME-ri_docs = ruby-ri_docs-${VERSION}.${PATCHLEVEL}
REVISION-main = 0
PKGSPEC-main = ruby->=1.9,<1.10
CONFIGURE_ARGS = --program-suffix=19 \

View File

@ -1,15 +0,0 @@
$OpenBSD: patch-bootstraptest_test_thread_rb,v 1.1 2011/11/08 23:38:57 jeremy Exp $
Skip a threading test that hits an infinite loop bug.
--- bootstraptest/test_thread.rb.orig Sun Oct 30 20:22:36 2011
+++ bootstraptest/test_thread.rb Sun Oct 30 20:24:33 2011
@@ -53,7 +53,7 @@ assert_equal %q{100}, %q{
100.times{
Thread.new{loop{Thread.pass}}
}
-}
+} if false
assert_equal %q{ok}, %q{
Thread.new{
:ok

View File

@ -0,0 +1,36 @@
$OpenBSD: patch-thread_pthread_c,v 1.1 2011/11/09 19:23:35 jeremy Exp $
Backport svn revision 33693, fixes bootstrap thread test failure.
--- thread_pthread.c.orig Thu Sep 22 03:45:23 2011
+++ thread_pthread.c Wed Nov 9 09:37:52 2011
@@ -109,16 +109,13 @@ gvl_yield(rb_vm_t *vm, rb_thread_t *th)
goto acquire;
}
- vm->gvl.wait_yield = 1;
-
- if (vm->gvl.waiting > 0)
- vm->gvl.need_yield = 1;
-
- if (vm->gvl.need_yield) {
+ if (vm->gvl.waiting > 0) {
/* Wait until another thread task take GVL. */
- while (vm->gvl.need_yield) {
+ vm->gvl.need_yield = 1;
+ vm->gvl.wait_yield = 1;
+ while (vm->gvl.need_yield)
native_cond_wait(&vm->gvl.switch_cond, &vm->gvl.lock);
- }
+ vm->gvl.wait_yield = 0;
}
else {
native_mutex_unlock(&vm->gvl.lock);
@@ -126,7 +123,6 @@ gvl_yield(rb_vm_t *vm, rb_thread_t *th)
native_mutex_lock(&vm->gvl.lock);
}
- vm->gvl.wait_yield = 0;
native_cond_broadcast(&vm->gvl.switch_wait_cond);
acquire:
gvl_acquire_common(vm);