|
@@ -56,6 +56,7 @@ type
|
|
list : ttasklinkedlist;
|
|
list : ttasklinkedlist;
|
|
hash : TFPHashList;
|
|
hash : TFPHashList;
|
|
main : tmodule;
|
|
main : tmodule;
|
|
|
|
+ procedure rebuild_hash;
|
|
public
|
|
public
|
|
constructor create;
|
|
constructor create;
|
|
destructor destroy; override;
|
|
destructor destroy; override;
|
|
@@ -255,9 +256,11 @@ function ttask_handler.continue(t : ttask_list) : Boolean;
|
|
|
|
|
|
var
|
|
var
|
|
m : tmodule;
|
|
m : tmodule;
|
|
|
|
+ orgname : shortstring;
|
|
|
|
|
|
begin
|
|
begin
|
|
m:=t.module;
|
|
m:=t.module;
|
|
|
|
+ orgname:=m.modulename^;
|
|
{$IFDEF DEBUG_CTASK}Writeln(m.ToString,' Continues. State: ',m.state);{$ENDIF}
|
|
{$IFDEF DEBUG_CTASK}Writeln(m.ToString,' Continues. State: ',m.state);{$ENDIF}
|
|
if Assigned(t.state) then
|
|
if Assigned(t.state) then
|
|
t.RestoreState;
|
|
t.RestoreState;
|
|
@@ -291,6 +294,27 @@ begin
|
|
if not result then
|
|
if not result then
|
|
// Not done, save state
|
|
// Not done, save state
|
|
t.SaveState;
|
|
t.SaveState;
|
|
|
|
+ {
|
|
|
|
+ the name can change as a result of processing, e.g. PROGRAM -> TB0406
|
|
|
|
+ Normally only for the initial module, but we'll do a generic check.
|
|
|
|
+ }
|
|
|
|
+ if m.modulename^<>orgname then
|
|
|
|
+ rebuild_hash;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure ttask_handler.rebuild_hash;
|
|
|
|
+
|
|
|
|
+var
|
|
|
|
+ t : ttask_list;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ Hash.Clear;
|
|
|
|
+ t:=list.firsttask;
|
|
|
|
+ While assigned(t) do
|
|
|
|
+ begin
|
|
|
|
+ Hash.Add(t.module.modulename^,t);
|
|
|
|
+ t:=t.nexttask;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure ttask_handler.processqueue;
|
|
procedure ttask_handler.processqueue;
|
|
@@ -336,13 +360,12 @@ procedure ttask_handler.addmodule(m: tmodule);
|
|
|
|
|
|
var
|
|
var
|
|
n : TSymStr;
|
|
n : TSymStr;
|
|
- e : tmodule;
|
|
|
|
- t : ttask_list;
|
|
|
|
|
|
+ e, t : ttask_list;
|
|
|
|
|
|
begin
|
|
begin
|
|
{$IFDEF DEBUG_CTASK}Writeln(m.ToString,' added to task scheduler. State: ',m.state);{$ENDIF}
|
|
{$IFDEF DEBUG_CTASK}Writeln(m.ToString,' added to task scheduler. State: ',m.state);{$ENDIF}
|
|
n:=m.modulename^;
|
|
n:=m.modulename^;
|
|
- e:=tmodule(Hash.Find(n));
|
|
|
|
|
|
+ e:=ttask_list(Hash.Find(n));
|
|
if e=nil then
|
|
if e=nil then
|
|
begin
|
|
begin
|
|
t:=ttask_list.create(m);
|
|
t:=ttask_list.create(m);
|