From: merch-redmine@... Date: 2020-11-02T23:57:06+00:00 Subject: [ruby-core:100700] [Ruby master Bug#17304] Ruby stuck calling sched_yield on fork Issue #17304 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Feedback Can you reproduce this issue with the master branch, or at least Ruby 2.6 or 2.7? The code you posted from Ruby 2.5 is no longer present in Ruby 2.6 or later versions. Ruby 2.5 is in security maintenance mode, and this doesn't appear to be a security issue. ---------------------------------------- Bug #17304: Ruby stuck calling sched_yield on fork https://bugs.ruby-lang.org/issues/17304#change-88341 * Author: thinline (THINline s.r.o.) * Status: Feedback * Priority: Normal * ruby -v: ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux-gnu] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- We have been encountering intermittent bug when using fork - the interpreter process gets stuck in a loop that keeps calling sched_yield. This keeps happening seemingly randomly every few days, while working correctly most of the time. (Summed over all machines we are talking about one successful invocation every second while getting this error once in two-three days.) If I did my search right, it's this code from `thread_pthread.c` in `native_stop_timer_thread(void)`: ``` while (ATOMIC_CAS(timer_thread_pipe.writing, (rb_atomic_t)0, 0)) { native_thread_yield(); } ``` If I remember correctly, first time we were hit by this was version 2.1.x - it was hapenning with 2.3.x for sure. (Ruby distributed by Debian in all cases.) I found a similar issue here https://bugs.ruby-lang.org/issues/13794 but that is supposed to be fixed. Patch from revision 60079 mentioned there is applied in Debian sources. Ruby backtrace from affected process (obtained via gdb) is: ``` from /usr/bin/app:102:in `
' from /usr/bin/app:102:in `new' from /usr/lib/app/klass.rb:119:in `initialize' from /usr/lib/app/klass.rb:119:in `new' from /usr/lib/app/instance/instance.rb:81:in `initialize' from /usr/lib/app/instance/instance.rb:81:in `fork' from /usr/lib/app/instance/instance.rb:103:in `block in initialize' from /usr/lib/app/instance/instance.rb:103:in `exec' ``` Attached is a backtrace from GDB (`thread apply all bt`) and simple reproducing program, which is a simplified version of what our app does and which I wasn't able to actually reproduce the bug with (As I said, it only happens randomly and somewhat rarely.) I realize this might be pretty difficult to hunt down, so if you need any other information, let me know, I will try to obtain it next time the bug is hit. ---Files-------------------------------- reproducer.rb (710 Bytes) backtrace.txt (18.3 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: