Skip to content

Commit

Permalink
calling threadWaitWrite only when errnor is eAGAIN
Browse files Browse the repository at this point in the history
  • Loading branch information
kazu-yamamoto committed Nov 21, 2012
1 parent 8771596 commit 2b09a9b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
8 changes: 6 additions & 2 deletions Network/Sendfile/BSD.hsc
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ sendloop dst src off len sentp hook = do
if errno `elem` [eAGAIN, eINTR] then do if errno `elem` [eAGAIN, eINTR] then do
sent <- peek sentp sent <- peek sentp
hook hook
threadWaitWrite dst -- Parallel IO manager use edge-trigger mode.
-- So, calling threadWaitWrite only when errnor is eAGAIN.
when (errno == eAGAIN) $ threadWaitWrite dst
let newoff = off + sent let newoff = off + sent
newlen = if len == entire then entire else len - sent newlen = if len == entire then entire else len - sent
sendloop dst src newoff newlen sentp hook sendloop dst src newoff newlen sentp hook
Expand Down Expand Up @@ -163,7 +165,9 @@ sendloopHeader dst src off len sentp hdr hlen = do
else else
return $ Just (newoff, len - sent) return $ Just (newoff, len - sent)
else do else do
threadWaitWrite dst -- Parallel IO manager use edge-trigger mode.
-- So, calling threadWaitWrite only when errnor is eAGAIN.
when (errno == eAGAIN) $ threadWaitWrite dst
let newlen = if len == entire then entire else len - sent let newlen = if len == entire then entire else len - sent
newhdr = remainingChunks (fromIntegral sent) hdr newhdr = remainingChunks (fromIntegral sent) hdr
newhlen = hlen - sent newhlen = hlen - sent
Expand Down
4 changes: 3 additions & 1 deletion Network/Sendfile/Linux.hsc
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -102,7 +102,9 @@ sendloop dst src offp len hook = do
loop 0 = return () loop 0 = return ()
loop left = do loop left = do
hook hook
threadWaitWrite dst -- Parallel IO manager use edge-trigger mode.
-- So, calling threadWaitWrite only when errnor is eAGAIN.
when (errno == eAGAIN) $ threadWaitWrite dst
sendloop dst src offp left hook sendloop dst src offp left hook


-- Dst Src in order. take care -- Dst Src in order. take care
Expand Down

0 comments on commit 2b09a9b

Please sign in to comment.