Al Boldi wrote:
> Micha Nelissen wrote:
> > Al Boldi wrote:
> > > I think the race comes in when you have two competing threads wanting
> > > to synchronize the the main thread.  It just hangs.
> >
> > Are you sure? This should work properly. Can you provide example (in a
> > bugreport)?
>
> Well, it's not easily repeatable, and seems to be very OS dependent.  On
> linux, I work around this problem by inserting a sleep(0) just before the
> synchronize.
>
> But there is another problem, it seems FreeOnTerminate doesn't actually
> free the memory on exit, unless the main thread actually waits for it to
> terminate, and this is on linux again.  Can you confirm this?

I played with this some more, and it turns out that not only is 
FreeOnTerminate completely broken but Free only frees the OS-thread memory 
if the thread is still running or is preceded by a WaitFor.  This is on 
fpc2.0.2/linux.  Maybe this has been fixed in 2.2.0?

Below is the test-code.

Can somebody confirm this on other platforms/fpcVersions.


Thanks!

--
Al

---

type

  { TThreadBug }

  TThreadBug = class(TThread)
  public
    procedure Execute; override;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    t1:TThreadBug;
  end;

var
  Form1: TForm1;

implementation

{ TThreadBug }
procedure TThreadBug.Execute;
begin
  writeln('just ran a thread... done!');
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  t1:=TThreadBug.Create(false);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  t1.Free;     // Only frees RTL object memory
               // OS-thread memory left dangling
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  t1.WaitFor;  // Correctly frees OS-thread memory
  t1.Free;     // Frees RTL object memory
end;


_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to