summaryrefslogtreecommitdiff
path: root/packages/fcl-async
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-03-19 22:20:39 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-03-19 22:20:39 +0000
commite59199c7c0c5f14c74084371c9ff4af4958d395d (patch)
tree8614a9e7786fd04328657574b9936ef47ff0d6c8 /packages/fcl-async
parent386e29159c62a2a7f3c1ae94cf11cafe5fe1fcea (diff)
downloadfpc-e59199c7c0c5f14c74084371c9ff4af4958d395d.tar.gz
* and yet more ESysEINTR handling
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@12927 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-async')
-rw-r--r--packages/fcl-async/src/unix/libasync.pp14
1 files changed, 10 insertions, 4 deletions
diff --git a/packages/fcl-async/src/unix/libasync.pp b/packages/fcl-async/src/unix/libasync.pp
index d885ddaa45..cd65e0f8b4 100644
--- a/packages/fcl-async/src/unix/libasync.pp
+++ b/packages/fcl-async/src/unix/libasync.pp
@@ -86,14 +86,20 @@ var
CurIOCallback: PIOCallbackData;
begin
if Handle^.Data.HighestHandle < 0 then
- // No I/O checks to do, so just wait...
- AsyncResult := fpselect(0, nil, nil, nil, TimeOut)
+ begin
+ // No I/O checks to do, so just wait...
+ repeat
+ AsyncResult := fpselect(0, nil, nil, nil, TimeOut)
+ until (AsyncResult<>-1) or (fpgeterrno<>ESysEINTR);
+ end
else
begin
CurReadFDSet := PFDSet(Handle^.Data.FDData)[0];
CurWriteFDSet := PFDSet(Handle^.Data.FDData)[1];
- AsyncResult := fpselect(Handle^.Data.HighestHandle + 1,
- @CurReadFDSet, @CurWriteFDSet, nil, TimeOut);
+ repeat
+ AsyncResult := fpselect(Handle^.Data.HighestHandle + 1,
+ @CurReadFDSet, @CurWriteFDSet, nil, TimeOut);
+ until (AsyncResult<>-1) or (fpgeterrno<>ESysEINTR);
if AsyncResult > 0 then
begin