[Haskell-cafe] Re: [Haskell] Blocked STM & GC question

2007-09-18 Thread Simon Marlow

Jules Bean wrote:

Simon Marlow wrote:

Ashley Yakeley wrote:
If I have a thread that's blocked on an STM retry or TChan read, and 
none of its TVars are referenced elsewhere, will it get stopped and 
garbage-collected?


I have in mind a pump thread that eternally reads off a TChan and 
pushes the result to some function. If the TChan is forgotten 
elsewhere, will the permanently blocked thread still sit around using 
up some small amount of memory, or will it be reaped by the garbage 
collector?


In this case, your thread should receive the BlockedIndefinitely 
exception:


http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Exception.html#v%3ABlockedIndefinitely 



If the system is idle for a certain amount of time (default 0.3s, 
change it with the +RTS -I option) a full GC is triggered, which will 
detect any threads that are blocked on unreachable objects, and 
arrange to send them the BlockedIndefinitely exception.



Including MVars? Your quoted text suggests 'Yes' but the docs you link 
to suggest 'No'.


Deadlocked threads blocked on MVars instead get the BlockedOnDeadMVar 
exception.  Perhaps those two exceptions should be merged.


Cheers,
Simon
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: [Haskell] Blocked STM & GC question

2007-09-18 Thread Jules Bean

Simon Marlow wrote:

Ashley Yakeley wrote:
If I have a thread that's blocked on an STM retry or TChan read, and 
none of its TVars are referenced elsewhere, will it get stopped and 
garbage-collected?


I have in mind a pump thread that eternally reads off a TChan and 
pushes the result to some function. If the TChan is forgotten 
elsewhere, will the permanently blocked thread still sit around using 
up some small amount of memory, or will it be reaped by the garbage 
collector?


In this case, your thread should receive the BlockedIndefinitely exception:

http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Exception.html#v%3ABlockedIndefinitely 



If the system is idle for a certain amount of time (default 0.3s, change 
it with the +RTS -I option) a full GC is triggered, which will detect 
any threads that are blocked on unreachable objects, and arrange to send 
them the BlockedIndefinitely exception.



Including MVars? Your quoted text suggests 'Yes' but the docs you link 
to suggest 'No'.


Jules
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe