fix signal hang
authorplugwash <plugwash@p10link.net>
Sat, 20 Feb 2010 13:48:27 +0000 (13:48 +0000)
committerplugwash <plugwash@p10link.net>
Sat, 20 Feb 2010 13:48:27 +0000 (13:48 +0000)
git-svn-id: file:///svnroot/lcore/trunk@82 b1de8a11-f9be-4011-bde0-cc7ace90066a

lcoreselect.pas

index df2501aea9bd4222cd8667330bc55230856496d5..feb8ef8b6388e2fa39bd66899c1a82fe3ff11b52 100755 (executable)
@@ -93,7 +93,9 @@ var
   tempsocket    : tlasio  ;\r
   socketcount   : integer ; // for debugging perposes :)\r
   dw,bt:integer;\r
   tempsocket    : tlasio  ;\r
   socketcount   : integer ; // for debugging perposes :)\r
   dw,bt:integer;\r
+  fd : integer;\r
 begin\r
 begin\r
+  //writeln('entering processasios');\r
 {  inc(lcoretestcount);}\r
 \r
     //the message loop will exit if all lasio's and ltimer's and lsignal's are destroyed\r
 {  inc(lcoretestcount);}\r
 \r
     //the message loop will exit if all lasio's and ltimer's and lsignal's are destroyed\r
@@ -105,20 +107,22 @@ begin
   for dw := (maxs shr 5) downto 0 do if (fdsr[dw] or fdsw[dw]) <> 0 then begin\r
     for bt := 0 to 31 do if (fdsr[dw] or fdsw[dw]) and (1 shl bt) <> 0 then begin\r
       inc(socketcount);\r
   for dw := (maxs shr 5) downto 0 do if (fdsr[dw] or fdsw[dw]) <> 0 then begin\r
     for bt := 0 to 31 do if (fdsr[dw] or fdsw[dw]) and (1 shl bt) <> 0 then begin\r
       inc(socketcount);\r
-      currentsocket := fdreverse[dw shl 5 or bt];\r
+      fd := dw shl 5 or bt;\r
+      //writeln('reversing fd ',fd);\r
+      currentsocket := fdreverse[fd];\r
       {if not assigned(currentsocket) then raise exception.create('currentsocket not assigned');\r
       if currentsocket.fdhandlein < 0 then raise exception.create('currentsocket.fdhandlein out of range');}\r
       {i've seen the out of range case actually happening, so it can happen. test: just close the fd - beware}\r
       if not assigned(currentsocket) then begin\r
       {if not assigned(currentsocket) then raise exception.create('currentsocket not assigned');\r
       if currentsocket.fdhandlein < 0 then raise exception.create('currentsocket.fdhandlein out of range');}\r
       {i've seen the out of range case actually happening, so it can happen. test: just close the fd - beware}\r
       if not assigned(currentsocket) then begin\r
-        fdclose(dw shl 5 or bt);\r
+        fdclose(fd);\r
         continue\r
       end;\r
       if currentsocket.fdhandlein < 0 then begin\r
         continue\r
       end;\r
       if currentsocket.fdhandlein < 0 then begin\r
-        fdclose(dw shl 5 or bt);\r
+        fdclose(fd);\r
         continue\r
       end;\r
       try\r
         continue\r
       end;\r
       try\r
-        currentsocket.handlefdtrigger(fd_isset(currentsocket.fdhandlein,fdsr),fd_isset(currentsocket.fdhandleout,fdsw));\r
+        currentsocket.handlefdtrigger(fd_isset(fd,fdsr),fd_isset(fd,fdsw));\r
       except\r
         on E: exception do begin\r
           currentsocket.HandleBackGroundException(e);\r
       except\r
         on E: exception do begin\r
           currentsocket.HandleBackGroundException(e);\r
@@ -172,6 +176,7 @@ begin
     end;\r
   end; *)\r
 {  debugout('socketcount='+inttostr(socketcount));}\r
     end;\r
   end; *)\r
 {  debugout('socketcount='+inttostr(socketcount));}\r
+  //writeln('leaving processasios');\r
 end;\r
 \r
 procedure tselecteventcore.processmessages;\r
 end;\r
 \r
 procedure tselecteventcore.processmessages;\r
@@ -327,6 +332,7 @@ end;
 \r
 procedure tselecteventcore.rmasterset(fd : integer;islistensocket : boolean);\r
 begin\r
 \r
 procedure tselecteventcore.rmasterset(fd : integer;islistensocket : boolean);\r
 begin\r
+  //writeln('rmasterset called with fd ',fd);\r
   if fd > absoloutemaxs then raise esocketexception.create('file discriptor out of range');\r
   if fd > maxs then maxs := fd;\r
   if fd_isset(fd,fdsrmaster) then exit;\r
   if fd > absoloutemaxs then raise esocketexception.create('file discriptor out of range');\r
   if fd > maxs then maxs := fd;\r
   if fd_isset(fd,fdsrmaster) then exit;\r
@@ -336,6 +342,7 @@ end;
 \r
 procedure tselecteventcore.rmasterclr(fd: integer);\r
 begin\r
 \r
 procedure tselecteventcore.rmasterclr(fd: integer);\r
 begin\r
+  //writeln('rmasterclr called with fd ',fd);\r
   if not fd_isset(fd,fdsrmaster) then exit;\r
   fd_clr(fd,fdsrmaster);\r
 \r
   if not fd_isset(fd,fdsrmaster) then exit;\r
   fd_clr(fd,fdsrmaster);\r
 \r
@@ -344,6 +351,7 @@ end;
 \r
 procedure tselecteventcore.wmasterset(fd : integer);\r
 begin\r
 \r
 procedure tselecteventcore.wmasterset(fd : integer);\r
 begin\r
+  //writeln('wmasterset called with fd ',fd);\r
   if fd > absoloutemaxs then raise esocketexception.create('file discriptor out of range');\r
   if fd > maxs then maxs := fd;\r
 \r
   if fd > absoloutemaxs then raise esocketexception.create('file discriptor out of range');\r
   if fd > maxs then maxs := fd;\r
 \r
@@ -354,6 +362,7 @@ end;
 \r
 procedure tselecteventcore.wmasterclr(fd: integer);\r
 begin\r
 \r
 procedure tselecteventcore.wmasterclr(fd: integer);\r
 begin\r
+  //writeln('wmasterclr called with fd ',fd);\r
   if not fd_isset(fd,fdswmaster) then exit;\r
   fd_clr(fd,fdswmaster);\r
 end;\r
   if not fd_isset(fd,fdswmaster) then exit;\r
   fd_clr(fd,fdswmaster);\r
 end;\r