From c068a2b115d0c356e9d61f875fba042ecdee15eb Mon Sep 17 00:00:00 2001 From: sampatbadhe Date: Sat, 22 Oct 2022 08:36:18 +0530 Subject: [PATCH 1/2] Add spec for TracePoint.allow_reentry - https://bugs.ruby-lang.org/issues/15912 --- core/tracepoint/allow_reentry_spec.rb | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 core/tracepoint/allow_reentry_spec.rb diff --git a/core/tracepoint/allow_reentry_spec.rb b/core/tracepoint/allow_reentry_spec.rb new file mode 100644 index 0000000000..afcabb661b --- /dev/null +++ b/core/tracepoint/allow_reentry_spec.rb @@ -0,0 +1,32 @@ +require_relative '../../spec_helper' +require_relative 'fixtures/classes' + +ruby_version_is "3.1" do + describe 'TracePoint.allow_reentry' do + it 'allows the reentrance in a given block' do + event_lines = [] + l1 = l2 = l3 = l4 = nil + TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? + + event_lines << tp.lineno + next if (__LINE__ + 2 .. __LINE__ + 4).cover?(tp.lineno) + TracePoint.allow_reentry do + a = 1; l3 = __LINE__ + b = 2; l4 = __LINE__ + end + end.enable do + c = 3; l1 = __LINE__ + d = 4; l2 = __LINE__ + end + + event_lines.should == [l1, l3, l4, l2, l3, l4] + end + + it 'raises RuntimeError' do + -> { + TracePoint.allow_reentry{} + }.should raise_error(RuntimeError) + end + end +end From acf1a8bae21ece9b8b1ca544434f2ab2e7145275 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Mon, 31 Oct 2022 14:30:13 +0100 Subject: [PATCH 2/2] Update core/tracepoint/allow_reentry_spec.rb --- core/tracepoint/allow_reentry_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/tracepoint/allow_reentry_spec.rb b/core/tracepoint/allow_reentry_spec.rb index afcabb661b..6bff1bed76 100644 --- a/core/tracepoint/allow_reentry_spec.rb +++ b/core/tracepoint/allow_reentry_spec.rb @@ -23,7 +23,7 @@ event_lines.should == [l1, l3, l4, l2, l3, l4] end - it 'raises RuntimeError' do + it 'raises RuntimeError when not called inside a TracePoint' do -> { TracePoint.allow_reentry{} }.should raise_error(RuntimeError)