secondlistener
[lcore.git] / lcore.pas
index 900bc96482e2d850e670ecb0fa6e7704693fc246..30e9c09dc9d77e5f20f1f6fa8883a82fafff4051 100755 (executable)
--- a/lcore.pas
+++ b/lcore.pas
@@ -37,6 +37,9 @@ interface
   const\r
     receivebufsize=1460;\r
 \r
+  var\r
+    absoloutemaxs:integer=0;\r
+\r
   type\r
     {$ifdef ver1_0}\r
       sigset= array[0..31] of longint;\r
@@ -326,6 +329,7 @@ end;
 constructor tlasio.create;\r
 begin\r
   inherited create(AOwner);\r
+  if not assigned(eventcore) then raise exception.create('no event core');\r
   sendq := tfifo.create;\r
   recvq := tfifo.create;\r
   state := wsclosed;\r
@@ -351,8 +355,8 @@ begin
   if nextasin <> nil then begin\r
     nextasin.prevasin := prevasin;\r
   end;\r
-  recvq.destroy;\r
-  sendq.destroy;\r
+  recvq.free;\r
+  sendq.free;\r
   inherited destroy;\r
 end;\r
 \r
@@ -392,7 +396,7 @@ end;
 \r
 procedure tlasio.internalclose(error:word);\r
 begin\r
-  if state<>wsclosed then begin\r
+  if (state<>wsclosed) and (state<>wsinvalidstate) then begin\r
     if (fdhandlein < 0) or (fdhandleout < 0) then raise exception.create('internalclose called with invalid fd handles');\r
     eventcore.rmasterclr(fdhandlein);//fd_clr(fdhandlein,fdsrmaster);\r
     eventcore.wmasterclr(fdhandleout);//fd_clr(fdhandleout,fdswmaster);\r
@@ -419,7 +423,7 @@ begin
 \r
     if assigned(onsessionclosed) then if not destroying then onsessionclosed(self,error);\r
   end;\r
-  sendq.del(maxlongint);\r
+  if assigned(sendq) then sendq.del(maxlongint);\r
 end;\r
 \r
 \r