hirura <hirura / gmail.com> wrote: > I tried and reproduced this on > - Ubuntu Linux on Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz (4cores / 8threads) > - CentOS Linux on Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz (1cores / > 2threads; a VM) > Unfortunately I don't have a Linux machine with AMD or other vendors'. OK, I'm on AMD (Phenom II) with 4 cores and no HT. > As for additional gdb outputs, I have a dumped core file of the > stopped process, and I tried printing the instructed. > But I couldn't get "vm" variable like > ~~~ > (gdb) print vm > No symbol "vm" in current context. > ~~~ > Could you give me a bit detailed way to get the output? I'm sorry I'm > not familiar with gdb. You can use "up" and "down" to move up/down stack frames until you're in a function where "vm" is accessible. (I'm not a gdb expert, either) > The t0 dummy thread is used so that the process is not killed by > deadlock detection and I can get the core-dump. > Without the thread, the process is killed as deadlock. Odd, I can't reproduce a deadlock with t0 commented out, either. > The output of the case is the below. I suppose deadlock detection is > working as expected. > (Line 45 is t1.join in this case) > ~~~ > Traceback (most recent call last): > 1: from readpartial_and_eof_test.rb:45:in `<main>' > readpartial_and_eof_test.rb:45:in `join': No live threads left. > Deadlock? (fatal) > 2 threads, 2 sleeps current:0x00007f8c498cfc20 main thread:0x00007f8c49566470 OK, so that's 2 for both vm->living_thread_num and vm->sleeper; in that case that's normal. I'm wondering if a stuck process will show some strange values (e.g. negative due to underflow). Perhaps `volatile' is unnecessary and the compiler does something strange with sleeper... Does removing it change things? ``` --- a/vm_core.h +++ b/vm_core.h @@ -565,7 +565,7 @@ typedef struct rb_vm_struct { unsigned int safe_level_: 1; int trace_running; - volatile int sleeper; + int sleeper; /* object management */ VALUE mark_object_ary; ``` Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>