X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/4782a5c5afee47721cc617daa40dd29828342c2b..2f03297fba2a10dbc860018fac7ad07c83b08ce8:/lcoreselect.pas?ds=inline

diff --git a/lcoreselect.pas b/lcoreselect.pas
index e0351eb..77da21f 100755
--- a/lcoreselect.pas
+++ b/lcoreselect.pas
@@ -6,12 +6,12 @@
   For conditions of distribution and use, see copyright notice in zlib_license.txt
   which is included in the package
   ----------------------------------------------------------------------------- }
-
-{$ifdef fpc}                                                                    
-  {$ifndef ver1_0}                                                              
-    {$define useinline}                                                         
-  {$endif}                                                                      
-{$endif}  
+
+{$ifdef fpc}
+  {$ifndef ver1_0}
+    {$define useinline}
+  {$endif}
+{$endif}
 
 unit lcoreselect;
 
@@ -31,6 +31,8 @@ var
 function getfdsrmaster : fdset; {$ifdef useinline}inline;{$endif}
 function getfdswmaster : fdset; {$ifdef useinline}inline;{$endif}
 
+procedure lcoreinit;
+
 implementation
 uses
   lcore,sysutils,
@@ -41,8 +43,12 @@ uses
 
 {$include unixstuff.inc}
 {$include ltimevalstuff.inc}
+
+const
+  absoloutemaxs_select = (sizeof(fdset)*8)-1;
+
 var
-  fdreverse:array[0..absoloutemaxs] of tlasio;
+  fdreverse:array[0..absoloutemaxs_select] of tlasio;
 type
   tselecteventcore=class(teventcore)
     public
@@ -78,7 +84,6 @@ begin
     end;
     temptimer := currenttimer;
     currenttimer := currenttimer.nexttimer;
-    if temptimer.released then temptimer.free;
   end;
 end;
 
@@ -129,17 +134,6 @@ begin
     end;
   end;
 
-  if asinreleaseflag then begin
-    asinreleaseflag := false;
-    currentsocket := firstasin;
-    while assigned(currentsocket) do begin
-      tempsocket := currentsocket;
-      currentsocket := currentsocket.nextasin;
-      if tempsocket.released then begin
-        tempsocket.free;
-      end;
-    end;
-  end;
   {
   !!! issues:
   - sockets which are released may not be freed because theyre never processed by the loop
@@ -209,7 +203,7 @@ var
 
 var
   fdsrmaster , fdswmaster               : fdset      ;
-
+
 function getfdsrmaster : fdset; {$ifdef fpc}inline;{$endif}
 begin
   result := fdsrmaster;
@@ -218,8 +212,8 @@ function getfdswmaster : fdset; {$ifdef fpc}inline;{$endif}
 begin
   result := fdswmaster;
 end;
-
-
+
+
 Function  doSelect(timeOut:PTimeVal):longint;//inline;
 var
   localtimeval : ttimeval;
@@ -289,25 +283,6 @@ begin
   repeat
 
     //the message loop will exit if all lasio's and ltimer's and lsignal's are destroyed
-    if (not assigned(firstasin)) and (not assigned(firsttimer)) {$ifndef nosignal} and (not assigned(firstsignal)){$endif} then exit;
-    {fd_zero(FDSR);
-    fd_zero(FDSW);
-    currentsocket := firstasin;
-    if not assigned(currentsocket) then exit; //the message loop will exit if all lsockets are destroyed
-
-    repeat
-      if (not currentsocket.released) and (currentsocket.state<>wsclosed) then fd_set(currentsocket.fdhandlein,fdsr);
-      if (not currentsocket.released) and (currentsocket.state=wsconnecting) then fd_set(currentsocket.fdhandleout,fdsw);
-      if currentsocket is tlsocket then begin
-         if (not currentsocket.released) and (currentsocket.state=wsconnected) and(tlsocket(currentsocket).sendq <> '') then fd_set(currentsocket.fdhandleout,fdsw);
-      end;
-      tempsocket := currentsocket;
-      currentsocket := currentsocket.nextasin;
-      if tempsocket.released then begin
-        tempsocket.free;
-      end;
-    until not assigned(currentsocket);
-    }
     processtasks;
     //currenttask := nil;
     {beware}
@@ -388,12 +363,20 @@ begin
   fdreverse[fd] := reverseto;
 end;
 
+var
+  inited:boolean;
 
-
+procedure lcoreinit;
 begin
+  if inited then exit;
+  inited := true;
   eventcore := tselecteventcore.create;
 
+  absoloutemaxs := absoloutemaxs_select;
+
   maxs := 0;
   fd_zero(fdsrmaster);
   fd_zero(fdswmaster);
+end;
+
 end.