anchor.diff:    FreeAndNil(FJobs);
     FCanStartEvent.Free;
     FreeAndNil(FCurrentJobResults);
  +  FreeAndNil(FJobsRunning);
     FCanDieEvent.SetEvent;
     inherited Destroy;
   end;
  
positive.code:   FreeAndNil(FCurrentJobResults);
  end;
  
  constructor TControlThread.Create;
  begin
    inherited Create(false);
  
negative.code: 
  { TmBatchExecutor }
  
  procedure TmBatchExecutor.SetMaxConcurrentThreads(AValue: integer);
  begin
    if (FMaxConcurrentThreads=AValue) or (AValue <= 0) then Exit;
    FMaxConcurrentThreads:=AValue;
  end;
  
  constructor TmBatchExecutor.Create;
  begin
    FRunning:= false;
    MaxConcurrentThreads:= MAX_CONCURRENT_THREADS_LIMIT;
    FCanEndEvent := TSimpleEvent.Create;
    FControlThread := TControlThread.Create;
    GetControlThread(Self).CanDieEvent := FCanEndEvent;
  