* rearchitect release method to use tasks (making it work on windows)
[lcore.git] / lcore.pas
index 727ca1cf16e76b0931eb6540116d33c7522f3113..6effe0e0bad0165f76bc606dafeddd4275163f06 100755 (executable)
--- a/lcore.pas
+++ b/lcore.pas
@@ -73,8 +73,9 @@ interface
     TSendData          = procedure (Sender: TObject; BytesSent: Integer) of object;\r
 \r
     tlcomponent = class(tcomponent)\r
+    private
+      procedure releasetaskhandler(wparam,lparam:longint);
     public\r
-      released:boolean;\r
       procedure release; virtual;\r
       destructor destroy; override;\r
     end;\r
@@ -94,8 +95,6 @@ interface
       onsenddata         : tsenddata      ;\r
       ondatasent         : tsocketevent      ;\r
       //connected          : boolean         ;\r
-      nextasin           : tlasio            ;\r
-      prevasin           : tlasio            ;\r
 \r
       recvq              : tfifo;\r
       OnBgException      : TBgExceptionEvent ;\r
@@ -227,7 +226,6 @@ procedure messageloop;
 procedure exitmessageloop;\r
 \r
 var\r
-  firstasin                             : tlasio     ;\r
   firsttimer                            : tltimer    ;\r
   firsttask  , lasttask   , currenttask : tltask     ;\r
 \r
@@ -285,12 +283,15 @@ begin
   inherited destroy;\r
 end;\r
 \r
-\r
+procedure tlcomponent.releasetaskhandler(wparam,lparam:longint);
+begin
+  free;
+end;
 \r
 \r
 procedure tlcomponent.release;\r
 begin\r
-  released := true;\r
+  addtask(releasetaskhandler,self,0,0);
 end;\r
 \r
 procedure tlasio.release;\r
@@ -343,26 +344,12 @@ begin
   state := wsclosed;\r
   fdhandlein := -1;\r
   fdhandleout := -1;\r
-  nextasin := firstasin;\r
-  prevasin := nil;\r
-  if assigned(nextasin) then nextasin.prevasin := self;\r
-  firstasin := self;\r
-\r
-  released := false;\r
 end;\r
 \r
 destructor tlasio.destroy;\r
 begin\r
   destroying := true;\r
   if state <> wsclosed then close;\r
-  if prevasin <> nil then begin\r
-    prevasin.nextasin := nextasin;\r
-  end else begin\r
-    firstasin := nextasin;\r
-  end;\r
-  if nextasin <> nil then begin\r
-    nextasin.prevasin := prevasin;\r
-  end;\r
   recvq.free;\r
   sendq.free;\r
   inherited destroy;\r
@@ -752,8 +739,6 @@ begin
   end;\r
   interval := 1000;\r
   enabled := true;\r
-  released := false;\r
-\r
 end;\r
 \r
 destructor tltimer.destroy;\r
@@ -904,7 +889,6 @@ end;
 \r
 \r
 begin\r
-  firstasin := nil;\r
   firsttask := nil;\r
   \r
 \r