[GHC] #8295: T4850 deadlocks when run with -Ds on Windows (also it's failing)

GHC ghc-devs at haskell.org
Sat Sep 14 10:38:23 CEST 2013


#8295: T4850 deadlocks when run with -Ds on Windows (also it's failing)
--------------------------+------------------------------------------------
       Reporter:  ezyang  |             Owner:
           Type:  bug     |            Status:  new
       Priority:  normal  |         Milestone:
      Component:          |           Version:  7.7
  Runtime System          |  Operating System:  Windows
       Keywords:          |   Type of failure:  Incorrect result at runtime
   Architecture:  x86_64  |         Test Case:  T4850
  (amd64)                 |          Blocking:
     Difficulty:          |
  Unknown                 |
     Blocked By:          |
Related Tickets:          |
--------------------------+------------------------------------------------
 T4850 has been failing recently, reporting too *few* OS threads allocated.
 That's pretty odd. What is also odd (and much less good) is that T4850 is
 deadlocking when you run it with `-Ds`. Uh oh!

 {{{
 bash.exe-3.1$ ./T4850 +RTS -Ds
         7eb0: created capset 0 of type 2
         7eb0: created capset 1 of type 3
         7eb0: cap 0: initialised
         7eb0: assigned cap 0 to capset 0
         7eb0: assigned cap 0 to capset 1
         7eb0: allocated 1 more capabilities
         7eb0: new task (taskCount: 1)
         7eb0: returning; I want capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: created thread 1
         7eb0: new bound thread (1)
         7eb0: cap 0: schedule()
         7eb0: cap 0: running thread 1 (ThreadRunGHC)
         7eb0: cap 0: created thread 2
         7eb0: cap 0: thread 1 stopped (finished)
         7eb0: bound thread (1) finished
         7eb0: starting new worker on capability 0
         7eb0: new worker task (taskCount: 2)
         7eb0: task exiting
         7eb0: new task (taskCount: 2)
         7eb0: returning; I want capability 0
         7fc0: cap 0: schedule()
         7fc0: giving up capability 0
         7fc0: passing capability 0 to worker 0x7eb0
         7eb0: resuming capability 0
         7eb0: cap 0: created thread 3
         7eb0: new bound thread (3)
         7eb0: cap 0: schedule()
         7eb0: giving up capability 0
         7eb0: passing capability 0 to worker 0x7fc0
         7fc0: woken up on capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to bound task 0x7eb0
         7eb0: woken up on capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (suspended while making a foreign
 call)
         7eb0: starting new worker on capability 0
         7eb0: new worker task (taskCount: 3)
         7eb0: returning; I want capability 0
         7b50: cap 0: schedule()
         7b50: giving up capability 0
         7b50: passing capability 0 to bound task 0x7eb0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: created thread 4
         7eb0: cap 0: thread 3 stopped (blocked on an MVar)
         thread    3 @ 00e03bbc is blocked on an MVar @ 00e021e4
 (TSO_DIRTY)
         7eb0: giving up capability 0
         7eb0: passing capability 0 to worker 0x7b50
         7b50: woken up on capability 0
         7b50: resuming capability 0
         7b50: cap 0: running thread 4 (ThreadRunGHC)
         7b50: cap 0: thread 4 stopped (suspended while making a foreign
 call)
         7b50: starting new worker on capability 0
         7b50: new worker task (taskCount: 4)
         7b50: new task (taskCount: 4)
         7b50: returning; I want capability 0
         7de4: cap 0: schedule()
         7de4: giving up capability 0
         7de4: passing capability 0 to worker 0x7b50
         7b50: resuming capability 0
         7b50: cap 0: created thread 5
         7b50: new bound thread (5)
         7b50: cap 0: schedule()
         7b50: cap 0: running thread 5 (ThreadRunGHC)
         7b50: cap 0: thread 5 stopped (finished)
         7b50: bound thread (5) finished
         7b50: freeing capability 0
         7b50: task exiting
         7b50: returning; I want capability 0
         7b50: resuming capability 0
         7b50: cap 0: running thread 4 (ThreadRunGHC)
         7b50: cap 0: waking up thread 3 on cap 0
         7b50: cap 0: thread 4 stopped (finished)
         7b50: giving up capability 0
         7b50: passing capability 0 to bound task 0x7eb0
         7eb0: woken up on capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (suspended while making a foreign
 call)
         7eb0: freeing capability 0
         7eb0: returning; I want capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (suspended while making a foreign
 call)
         7eb0: freeing capability 0
 4
         7eb0: returning; I want capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: created thread 6
         7eb0: cap 0: thread 3 stopped (blocked on an MVar)
         thread    3 @ 00e03bbc is blocked on an MVar @ 00e021e4
 (TSO_DIRTY)
         7eb0: giving up capability 0
         7eb0: passing capability 0 to worker 0x7b50
         7b50: woken up on capability 0
         7b50: resuming capability 0
         7b50: cap 0: running thread 6 (ThreadRunGHC)
         7b50: cap 0: thread 6 stopped (suspended while making a foreign
 call)
         7b50: freeing capability 0
         7b50: new task (taskCount: 4)
         7b50: returning; I want capability 0
         7b50: resuming capability 0
         7b50: cap 0: created thread 7
         7b50: new bound thread (7)
         7b50: cap 0: schedule()
         7b50: cap 0: running thread 7 (ThreadRunGHC)
         7b50: cap 0: thread 7 stopped (finished)
         7b50: bound thread (7) finished
         7b50: freeing capability 0
         7b50: task exiting
         7b50: returning; I want capability 0
         7b50: resuming capability 0
         7b50: cap 0: running thread 6 (ThreadRunGHC)
         7b50: cap 0: waking up thread 3 on cap 0
         7b50: cap 0: thread 6 stopped (finished)
         7b50: giving up capability 0
         7b50: passing capability 0 to bound task 0x7eb0
         7eb0: woken up on capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (suspended while making a foreign
 call)
         7eb0: freeing capability 0
         7eb0: returning; I want capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (suspended while making a foreign
 call)
         7eb0: freeing capability 0
 4
         7eb0: returning; I want capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (yielding)
         7eb0: cap 0: running thread 3 (ThreadRunGHC)
         7eb0: cap 0: thread 3 stopped (finished)
         7eb0: bound thread (3) finished
         7eb0: freeing capability 0
         7eb0: task exiting
         7eb0: new task (taskCount: 4)
         7eb0: returning; I want capability 0
         7eb0: resuming capability 0
         7eb0: cap 0: created thread 8
         7eb0: new bound thread (8)
         7eb0: cap 0: schedule()
         7eb0: cap 0: running thread 8 (ThreadRunGHC)
         7eb0: cap 0: thread 8 stopped (finished)
         7eb0: bound thread (8) finished
         7eb0: freeing capability 0
         7eb0: task exiting
         7eb0: new task (taskCount: 4)
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7eb0: returning; I want capability 0
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (suspended while making a foreign
 call)
         7fc0: passing capability 0 to worker 0x7eb0
         7fc0: returning; I want capability 0
         7fc0: resuming capability 0
         7fc0: cap 0: running thread 2 (ThreadRunGHC)
         7fc0: cap 0: thread 2 stopped (yielding)
         7fc0: SCHED_INTERRUPTING
         7fc0: cap 0: requesting sequential GC
         7fc0: grabbing all the capabilies (0/1)
 all threads:
 threads on capability 0:
         thread    2 @ 00e037bc is not blocked (TSO_DIRTY)
 other threads:
         7fc0: deleting all threads
         7fc0: cap 0: raising exception in thread 2.
         7fc0: cap 0: starting GC
         7fc0: cap 0: GC working
         7fc0: cap 0: GC idle
         7fc0: cap 0: GC done
         7fc0: cap 0: GC idle
         7fc0: cap 0: GC done
         7fc0: cap 0: GC idle
         7fc0: cap 0: GC done
         7fc0: cap 0: all caps stopped for GC
         7fc0: cap 0: finished GC
         7fc0: SCHED_SHUTTING_DOWN
         7fc0: giving up capability 0
         7fc0: passing capability 0 to worker 0x7eb0
         7eb0: resuming capability 0
         7eb0: passing capability 0 to worker 0x7fc0
         7eb0: shutting down capability 0, attempt 0
         7fc0: woken up on capability 0
         7eb0: runnable threads or workers still alive, yielding
         7eb0: passing capability 0 to worker 0x7fc0
         7eb0: shutting down capability 0, attempt 1
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 2
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 3
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 4
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 5
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 6
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 7
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 8
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 9
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 10
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 11
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 12
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 13
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 14
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 15
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 16
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 17
         7eb0: not owner, yielding
         7eb0: shutting down capability 0, attempt 18
         7eb0: not owner, yielding
 ...
 }}}

 ad infinitum.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8295>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list