[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,
Stefan



-----Ursprüngliche Nachricht-----
Von: Lazarus [mailto:lazarus-bounces at lists.lazarus-ide.org] Im Auftrag von Sven
Barth
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.

Regards,
Sven


--
_______________________________________________
Lazarus mailing list
Lazarus at lists.lazarus-ide.org
http://lists.lazarus-ide.org/listinfo/lazarus
-------------- 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