Jeremy Shaw wrote:
On Wed, Feb 17, 2010 at 2:36 AM, Taru Karttunen <tar...@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?

[--snip--]

(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.

Cheers,

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

Reply via email to