Skip to content

Commit a725732

Browse files
authored
Merge pull request rails#53975 from byroot/mark-reported-errors
ErrorSubscriber: also marks the error causes as reported
2 parents a26bc53 + ce1024c commit a725732

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

activesupport/lib/active_support/error_reporter.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,11 @@ def report(error, handled: true, severity: handled ? :warning : :error, context:
232232
end
233233
end
234234

235-
unless error.frozen?
236-
error.instance_variable_set(:@__rails_error_reported, true)
235+
while error
236+
unless error.frozen?
237+
error.instance_variable_set(:@__rails_error_reported, true)
238+
end
239+
error = error.cause
237240
end
238241

239242
nil

activesupport/test/error_reporter_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,31 @@ class ErrorReporterTest < ActiveSupport::TestCase
269269
end
270270
end
271271

272+
test "causes can't be reported again either" do
273+
begin
274+
begin
275+
begin
276+
raise "Original"
277+
rescue
278+
raise "Another"
279+
end
280+
rescue
281+
raise "Yet Another"
282+
end
283+
rescue => @error
284+
end
285+
286+
assert_difference -> { @subscriber.events.size }, +1 do
287+
@reporter.report(@error, handled: false)
288+
end
289+
290+
assert_no_difference -> { @subscriber.events.size } do
291+
3.times do
292+
@reporter.report(@error.cause.cause, handled: false)
293+
end
294+
end
295+
end
296+
272297
test "can report frozen exceptions" do
273298
assert_difference -> { @subscriber.events.size }, +1 do
274299
@reporter.report(@error.freeze, handled: false)

0 commit comments

Comments
 (0)