[Haskell-cafe] Re: sendfile leaking descriptors on Linux?

Bardur Arantsson spam at scientician.net
Wed Feb 17 14:27:07 EST 2010

Jeremy Shaw wrote:
> On Wed, Feb 17, 2010 at 2:36 AM, Taru Karttunen <taruti at taruti.net> wrote:
> So for sendfile, instead of threadWaitWrite we could do:
>  r <- timeout (60 * 10^6) threadWaitWrite
>  case r of
>    Nothing -> ... -- timed out
>    (Just ()) -> ... -- keep going

For sendfile, a timeout of 1 second would probably be fine. The *ONLY* 
purpose of threadWaitWrite in the sendfile code is to avoid busy-waiting 
on EAGAIN from the native sendfile.

What would work is, instead of using threadWaitRead (as in the code you 
supplied) to simply have a 1 second timeout which causes the loop to 
call the native sendfile again. Native sendfile *will* fail with an 
error code if the socket has been disconnected.

With that in place "dead" threads waiting on threadWaitWrite will only 
linger at most 1 second before discovering the disconnect.

Not ideal, but a lot better than the current situation.

> Does that sound like the right fix to you?


> (Obviously, if people are using sendfile with something other than happstack,
> it does not help them, but it  sounds like trying to fix things in
 > sendfile is misguided anyway.)

How so? As a user I expect sendfile to work and not semi-randomly block 
threads indefinitely.


More information about the Haskell-Cafe mailing list