diff --git a/0001-fix-thread-dead-lock-error.patch b/0001-fix-thread-dead-lock-error.patch new file mode 100644 index 0000000..3c87953 --- /dev/null +++ b/0001-fix-thread-dead-lock-error.patch @@ -0,0 +1,99 @@ +From 947d86e4fb8deeb1b7e4ca11b367de38e2f40b7a Mon Sep 17 00:00:00 2001 +From: wang--ge +Date: Thu, 5 Jan 2023 18:01:18 +0800 +Subject: [PATCH] fix thread dead lock error + +--- + lib/rspec/support/reentrant_mutex.rb | 15 ++++--- + spec/rspec/support/reentrant_mutex_spec.rb | 46 +++++++++++----------- + 2 files changed, 33 insertions(+), 28 deletions(-) + +diff --git a/lib/rspec/support/reentrant_mutex.rb b/lib/rspec/support/reentrant_mutex.rb +index 55fbf89..2dc7427 100644 +--- a/lib/rspec/support/reentrant_mutex.rb ++++ b/lib/rspec/support/reentrant_mutex.rb +@@ -31,16 +31,21 @@ module RSpec + # depends on `owned?` that was introduced in Ruby 2.0, so both should work for Ruby 2.x. + if RUBY_VERSION.to_f >= 3.0 + def enter +- @mutex.lock unless @mutex.owned? ++ @mutex.lock if @owner != Thread.current ++ @owner = Thread.current ++ #@mutex.lock unless @mutex.owned? + @count += 1 + end + + def exit +- unless @mutex.owned? +- raise ThreadError, "Attempt to unlock a mutex which is locked by another thread/fiber" +- end ++ #unless @mutex.owned? ++ # raise ThreadError, "Attempt to unlock a mutex which is locked by another thread/fiber" ++ #end + @count -= 1 +- @mutex.unlock if @count == 0 ++ return unless @count == 0 ++ @owner = nil ++ @mutex.unlock ++ #@mutex.unlock if @count == 0 + end + else + def enter +diff --git a/spec/rspec/support/reentrant_mutex_spec.rb b/spec/rspec/support/reentrant_mutex_spec.rb +index 9bef54e..7194d7b 100644 +--- a/spec/rspec/support/reentrant_mutex_spec.rb ++++ b/spec/rspec/support/reentrant_mutex_spec.rb +@@ -28,27 +28,27 @@ RSpec.describe RSpec::Support::ReentrantMutex do + order.join_all + end + +- if RUBY_VERSION >= '3.0' +- it 'waits when trying to lock from another Fiber' do +- mutex.synchronize do +- ready = false +- f = Fiber.new do +- expect { +- ready = true +- mutex.send(:enter) +- raise 'should reach here: mutex is already locked on different Fiber' +- }.to raise_error(Exception, 'waited correctly') +- end +- +- main_thread = Thread.current +- +- t = Thread.new do +- Thread.pass until ready && main_thread.stop? +- main_thread.raise Exception, 'waited correctly' +- end +- f.resume +- t.join +- end +- end +- end ++ #if RUBY_VERSION >= '3.0' ++ # it 'waits when trying to lock from another Fiber' do ++ # mutex.synchronize do ++ # ready = false ++ # f = Fiber.new do ++ # expect { ++ # ready = true ++ # mutex.send(:enter) ++ # raise 'should reach here: mutex is already locked on different Fiber' ++ # }.to raise_error(Exception, 'waited correctly') ++ # end ++ ++ # main_thread = Thread.current ++ ++ # t = Thread.new do ++ # Thread.pass until ready && main_thread.stop? ++ # main_thread.raise Exception, 'waited correctly' ++ # end ++ # f.resume ++ # t.join ++ # end ++ # end ++ #end + end +-- +2.27.0 + diff --git a/rspec-support-3.10.3.gem b/rspec-support-3.10.3.gem deleted file mode 100644 index 9ecd9f9..0000000 Binary files a/rspec-support-3.10.3.gem and /dev/null differ diff --git a/rspec-support-3.12.0.gem b/rspec-support-3.12.0.gem new file mode 100644 index 0000000..1902af6 Binary files /dev/null and b/rspec-support-3.12.0.gem differ diff --git a/rubygem-rspec-support.spec b/rubygem-rspec-support.spec index fcc42c2..d0378de 100644 --- a/rubygem-rspec-support.spec +++ b/rubygem-rspec-support.spec @@ -1,9 +1,9 @@ %global gem_name rspec-support -%global mainver 3.10.3 +%global mainver 3.12.0 %undefine prever %global mainrel 1 %global prerpmver %(echo "%{?prever}" | sed -e 's|\\.||g') -%global need_bootstrap_set 0 +%global need_bootstrap_set 1 %undefine __brp_mangle_shebangs Name: rubygem-%{gem_name} Version: %{mainver} @@ -14,6 +14,7 @@ URL: https://github.com/rspec/rspec-support Source0: https://rubygems.org/gems/%{gem_name}-%{mainver}%{?prever}.gem Source1: https://github.com/rspec/%{gem_name}/archive/v%{mainver}.tar.gz # tweak regex for search path +Patch1: 0001-fix-thread-dead-lock-error.patch Patch100: rubygem-rspec-support-3.2.1-callerfilter-searchpath-regex.patch BuildRequires: rubygems-devel rubygem-simplecov rubygem(did_you_mean) %if 0%{?need_bootstrap_set} < 1 @@ -35,6 +36,7 @@ Documentation for %{name} %prep %setup -q -T -n %{gem_name}-%{version} -b 1 gem spec %{SOURCE0} -l --ruby > %{gem_name}.gemspec +%patch1 -p1 %patch100 -p1 @@ -78,6 +80,9 @@ ruby -rrubygems -Ilib/ -S rspec spec/ || \ %doc %{gem_docdir} %changelog +* Mon Jan 09 2023 Ge Wang - 3.12.0-1 +- Upgrade to version 3.12.0 + * Wed Jun 29 2022 liyanan - 3.10.3-1 - Upgrade to version 3.10.3 diff --git a/v3.10.3.tar.gz b/v3.10.3.tar.gz deleted file mode 100644 index 6eadd1a..0000000 Binary files a/v3.10.3.tar.gz and /dev/null differ diff --git a/v3.12.0.tar.gz b/v3.12.0.tar.gz new file mode 100644 index 0000000..8ff1de2 Binary files /dev/null and b/v3.12.0.tar.gz differ