Bug #13163
Uncaught exceptions may not be reported when Thread#report_on_exception=true and Thread#abort_on_exception=true
Description
When we set true on both of Thread#report_on_exception
and Thread#abort_on_exception
, it just works as Thread#abort_on_exception
and raised error will be re-raised in main thread.
But in our case, main thread sometimes in begin
-rescue
clause, or sometimes out of begin
-rescue
clause.
When main thread in begin
-rescue
clause (and main thread code may raise errors in their own business), we cannot know that threads are dead by errors.
What I expected by specifying both of Thread#report_on_exception=true
and Thread#abort_on_exception=true
:
- "Thread terminated with exception" is reported always (even if
Thread#abort_on_exception
is set) - Raised error is re-raised in main thread if
Thread#abort_on_exception
is true
How do you think about this idea?
Associated revisions
thread.c: report then abort
- thread.c (thread_start_func_2): report then abort on exception, if both are set. [ruby-core:79280] [Bug #13163]
thread.c: report then abort
- thread.c (thread_start_func_2): report then abort on exception, if both are set. [ruby-core:79280] [Bug #13163]
thread.c: report then abort
- thread.c (thread_start_func_2): report then abort on exception, if both are set. [ruby-core:79280] [Bug #13163]
merge revision(s) 59963: [Backport #13163]
thread.c: report then abort * thread.c (thread_start_func_2): report then abort on exception, if both are set. [ruby-core:79280] [Bug #13163]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@62711 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
merge revision(s) 59963: [Backport #13163]
thread.c: report then abort * thread.c (thread_start_func_2): report then abort on exception, if both are set. [ruby-core:79280] [Bug #13163]
History
Updated by nobu (Nobuyoshi Nakada) about 2 years ago
- Status changed from Open to Feedback
- Description updated (diff)
Updated by Eregon (Benoit Daloze) about 2 years ago
+1
The patch looks good.
The message of the assert_warn should be changed though.
Updated by naruse (Yui NARUSE) about 2 years ago
- Backport set to 2.2: DONTNEED, 2.3: REQUIRED, 2.4: REQUIRED
- Assignee set to nobu (Nobuyoshi Nakada)
- Status changed from Feedback to Assigned
- Tracker changed from Misc to Bug
Hmm, indeed this seems considered a bug.
nobu (Nobuyoshi Nakada) Could you commit it?
Updated by nobu (Nobuyoshi Nakada) about 2 years ago
- Status changed from Assigned to Closed
Applied in changeset trunk|r59963.
thread.c: report then abort
- thread.c (thread_start_func_2): report then abort on exception, if both are set. [ruby-core:79280] [Bug #13163]
Updated by Eregon (Benoit Daloze) about 2 years ago
- Backport changed from 2.2: DONTNEED, 2.3: REQUIRED, 2.4: REQUIRED to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED
I believe we only need a 2.4 backport, Thread#report_on_exception is only defined from Ruby 2.4+.
Updated by nagachika (Tomoyuki Chikanaga) almost 2 years ago
- Backport changed from 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE
ruby_2_4 r62711 merged revision(s) 59963.
thread.c: report then abort
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59963 b2dd03c8-39d4-4d8f-98ff-823fe69b080e