[Lazarus] Memory leak with Synchronize on external threads

Stefan Schalk schalk.stefan at googlemail.com
Thu Jun 2 15:02:34 CEST 2016

   Hi Sven,

many thanks for your quick response and solution!

I tried the new FPC sources (Revision 33878) and ran in a segmentation fault.
In classes.inc line 345 the SizeOf gets the length from the pointer but I think
the length of the structure is needed:

    currently: FillChar(syncentry^, SizeOf(syncentry), 0);

    suggestion: FillChar(syncentry^, SizeOf(TThreadQueueEntry), 0);

Because of that, the uninitialized structure member "Next" will lead to a
segmentation fault afterwards.
I tried the suggestion and everything works fine (no SIGSEGV, no memory leak).
Can you please review my suggestion?

Best regards,

-----Urspr√ľngliche Nachricht-----
Von: Lazarus [mailto:lazarus-bounces at lists.lazarus-ide.org] Im Auftrag von Sven
Gesendet: Dienstag, 31. Mai 2016 22:22
An: lazarus at lists.lazarus-ide.org
Betreff: Re: [Lazarus] Memory leak with Synchronize on external threads

I've committed a fix in FPC revision 33863 and if all goes well it should be
merged to 3.0.1 as well, thus becoming part of 3.0.2.
A check with Delphi has shown that the WakeMainThread event gets Nil as Sender
argument with an external thread, so I can avoid the use of CurrentThread which
triggered the memory usage.
Please note that this is however not a leak as CurrentThread will create a
TExternalThread instance for a thread that hasn't been created by TThread (and
for which no instance exists yet) and this instance must
(sadly) be kept around until the program terminates.


Lazarus mailing list
Lazarus at lists.lazarus-ide.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 2982 bytes
Desc: not available
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20160602/b3b12623/attachment-0002.bin>

More information about the Lazarus mailing list