summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-09-16 20:00:11 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-09-16 20:00:11 +0000
commit84cc67f98b7f26331de373d4b5b639babd9cac11 (patch)
treee23711cbcc4e40056e526a86f68b13fdfddc7f2e
parent7e7b52d4a6719ca49bef9b15d48ccbf04dff3477 (diff)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@13459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rwxr-xr-xtest/thread/lbtest.rb51
-rw-r--r--test/thread/test_thread.rb14
-rw-r--r--version.h2
4 files changed, 71 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9dac6de..ec0245c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Sep 17 04:56:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/thread/test_thread.rb (test_local_barrier),
+ test/thread/lbtest.rb: test for [ruby-dev:30653].
+
Mon Sep 17 04:52:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* ruby.c (proc_options): -W should be allowed in RUBYOPT
diff --git a/test/thread/lbtest.rb b/test/thread/lbtest.rb
new file mode 100755
index 0000000..10bb901
--- /dev/null
+++ b/test/thread/lbtest.rb
@@ -0,0 +1,51 @@
+#! /usr/bin/ruby
+require 'thread'
+
+class LocalBarrier
+ def initialize(n)
+ @wait = Queue.new
+ @done = Queue.new
+ @keeper = begin_keeper(n)
+ end
+
+ def sync
+ @done.push(true)
+ @wait.pop
+ end
+
+ def join
+ @keeper.join
+ end
+
+ private
+ def begin_keeper(n)
+ Thread.start do
+ n.times do
+ @done.pop
+ end
+ n.times do
+ @wait.push(true)
+ end
+ end
+ end
+end
+
+n = 10
+
+lb = LocalBarrier.new(n)
+
+(n - 1).times do |i|
+ Thread.start do
+ sleep((rand(n) + 1) / 10.0)
+ puts "#{i}: done"
+ lb.sync
+ puts "#{i}: cont"
+ end
+end
+
+lb.sync
+puts "#{n-1}: done"
+
+# lb.join # leaving waiting threads.
+
+puts "exit."
diff --git a/test/thread/test_thread.rb b/test/thread/test_thread.rb
index abdcebf..44ae3b3 100644
--- a/test/thread/test_thread.rb
+++ b/test/thread/test_thread.rb
@@ -1,3 +1,4 @@
+# -*- ruby-indent-level: 4 -*-
require 'thread'
require 'test/unit'
@@ -63,5 +64,18 @@ class TC_Thread < Test::Unit::TestCase
assert_raises(Interrupt) { thread.value }
assert(locked)
end
+
+ def test_local_barrier
+ dir = File.dirname(__FILE__)
+ lbtest = File.join(dir, "lbtest.rb")
+ $:.unshift File.join(File.dirname(dir), 'ruby')
+ require 'envutil'
+ $:.shift
+ 10.times {
+ result = `#{EnvUtil.rubybin} #{lbtest}`
+ assert(!$?.coredump?, '[ruby-dev:30653]')
+ assert_equal("exit.", result[/.*\Z/], '[ruby-dev:30653]')
+ }
+ end
end
diff --git a/version.h b/version.h
index 8d0e635..ba76ada 100644
--- a/version.h
+++ b/version.h
@@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2007-09-17"
#define RUBY_VERSION_CODE 186
#define RUBY_RELEASE_CODE 20070917
-#define RUBY_PATCHLEVEL 103
+#define RUBY_PATCHLEVEL 104
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8