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

Simon Marlow simonmarhaskell at gmail.com
Tue Sep 18 11:32:17 EDT 2007


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


More information about the Haskell-Cafe mailing list