Forum > FPC development
Building trunk with heaptrace shows leaks in compiler/tools.
TRon:
trace list (sorry it will not fit in previous posts):
--- Code: ---grep -i "unfreed memory" build.log
13 unfreed memory blocks : 2192
0 unfreed memory blocks : 0
1 unfreed memory blocks : 16
1 unfreed memory blocks : 184
1015 unfreed memory blocks : 143752
13 unfreed memory blocks : 2192
0 unfreed memory blocks : 0
1 unfreed memory blocks : 16
1 unfreed memory blocks : 184
1015 unfreed memory blocks : 143752
13 unfreed memory blocks : 2192
0 unfreed memory blocks : 0
1 unfreed memory blocks : 16
1 unfreed memory blocks : 184
1015 unfreed memory blocks : 143752
10 unfreed memory blocks : 1696
20 unfreed memory blocks : 965
2 unfreed memory blocks : 32
13 unfreed memory blocks : 2192
0 unfreed memory blocks : 0
1 unfreed memory blocks : 16
1 unfreed memory blocks : 184
1015 unfreed memory blocks : 143752
13 unfreed memory blocks : 2192
0 unfreed memory blocks : 0
1 unfreed memory blocks : 16
1 unfreed memory blocks : 184
1015 unfreed memory blocks : 143752
13 unfreed memory blocks : 2192
0 unfreed memory blocks : 0
1 unfreed memory blocks : 16
1 unfreed memory blocks : 184
3 unfreed memory blocks : 544
0 unfreed memory blocks : 0
20 unfreed memory blocks : 964
--- End code ---
So, there you go ! :D
I wouldn't even have tried with trunk but since my script depends on ftp I got the sources from snapshot and those provided me these errors. But since source archive in snapshot is over a week old I can't rely on that.
It goes without mention that the same can be produced with make all OPT="-glh" (which builds a bit quicker :D )
trace results from build with OPT ='glh"
--- Code: ---206 unfreed memory blocks : 36584
7 unfreed memory blocks : 1344
1 unfreed memory blocks : 120
30 unfreed memory blocks : 5240
61 unfreed memory blocks : 11568
5 unfreed memory blocks : 888
10 unfreed memory blocks : 1704
13 unfreed memory blocks : 2496
1 unfreed memory blocks : 120
4 unfreed memory blocks : 624
1 unfreed memory blocks : 16
16 unfreed memory blocks : 2784
27 unfreed memory blocks : 4968
1 unfreed memory blocks : 192
33 unfreed memory blocks : 5400
19 unfreed memory blocks : 3576
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1352 unfreed memory blocks : 176048
206 unfreed memory blocks : 36584
7 unfreed memory blocks : 1344
1 unfreed memory blocks : 120
30 unfreed memory blocks : 5240
61 unfreed memory blocks : 11568
5 unfreed memory blocks : 888
10 unfreed memory blocks : 1704
13 unfreed memory blocks : 2496
1 unfreed memory blocks : 120
4 unfreed memory blocks : 624
1 unfreed memory blocks : 16
16 unfreed memory blocks : 2784
27 unfreed memory blocks : 4968
1 unfreed memory blocks : 192
33 unfreed memory blocks : 5400
19 unfreed memory blocks : 3576
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1352 unfreed memory blocks : 176048
206 unfreed memory blocks : 36584
7 unfreed memory blocks : 1344
1 unfreed memory blocks : 120
30 unfreed memory blocks : 5240
61 unfreed memory blocks : 11568
5 unfreed memory blocks : 888
10 unfreed memory blocks : 1704
13 unfreed memory blocks : 2496
1 unfreed memory blocks : 120
4 unfreed memory blocks : 624
1 unfreed memory blocks : 16
16 unfreed memory blocks : 2784
27 unfreed memory blocks : 4968
1 unfreed memory blocks : 192
33 unfreed memory blocks : 5400
19 unfreed memory blocks : 3576
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1352 unfreed memory blocks : 176048
10 unfreed memory blocks : 1696
2 unfreed memory blocks : 384
30 unfreed memory blocks : 2813
1 unfreed memory blocks : 192
2 unfreed memory blocks : 32
206 unfreed memory blocks : 36584
7 unfreed memory blocks : 1344
1 unfreed memory blocks : 120
30 unfreed memory blocks : 5240
61 unfreed memory blocks : 11568
5 unfreed memory blocks : 888
10 unfreed memory blocks : 1704
13 unfreed memory blocks : 2496
1 unfreed memory blocks : 120
4 unfreed memory blocks : 624
1 unfreed memory blocks : 16
16 unfreed memory blocks : 2784
27 unfreed memory blocks : 4968
1 unfreed memory blocks : 192
33 unfreed memory blocks : 5400
19 unfreed memory blocks : 3576
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1352 unfreed memory blocks : 176048
206 unfreed memory blocks : 36584
7 unfreed memory blocks : 1344
1 unfreed memory blocks : 120
30 unfreed memory blocks : 5240
61 unfreed memory blocks : 11568
5 unfreed memory blocks : 888
10 unfreed memory blocks : 1704
13 unfreed memory blocks : 2496
1 unfreed memory blocks : 120
4 unfreed memory blocks : 624
1 unfreed memory blocks : 16
16 unfreed memory blocks : 2784
27 unfreed memory blocks : 4968
1 unfreed memory blocks : 192
33 unfreed memory blocks : 5400
19 unfreed memory blocks : 3576
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1352 unfreed memory blocks : 176048
206 unfreed memory blocks : 36584
7 unfreed memory blocks : 1344
1 unfreed memory blocks : 120
30 unfreed memory blocks : 5240
61 unfreed memory blocks : 11568
5 unfreed memory blocks : 888
10 unfreed memory blocks : 1704
13 unfreed memory blocks : 2496
1 unfreed memory blocks : 120
4 unfreed memory blocks : 624
1 unfreed memory blocks : 16
16 unfreed memory blocks : 2784
27 unfreed memory blocks : 4968
1 unfreed memory blocks : 192
33 unfreed memory blocks : 5400
19 unfreed memory blocks : 3576
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
1 unfreed memory blocks : 192
3 unfreed memory blocks : 544
0 unfreed memory blocks : 0
17 unfreed memory blocks : 890
--- End code ---
Thaddy:
@TRon
Nothing of the kind here. Lazarus may not always play nice - depending on installed packages - but FPC itself has no leaks, nor has the rtl, nor has the fcl.
Note, just in case you misunderstood, I rarely use Lazarus and program from classes, not components.
(Anyway: let's get back to APL: any progress?)
PascalDragon:
--- Quote from: Thaddy on January 25, 2023, 08:11:57 pm ---but FPC itself has no leaks, nor has the rtl, nor has the fcl.
--- End quote ---
This blanket statement is simply not true: The compiler, the RTL and the FCL can all three have leaks due to bugs. They should be reported with small examples that trigger the leak.
TRon:
--- Quote from: Thaddy on January 25, 2023, 08:11:57 pm ---Nothing of the kind here. Lazarus may not always play nice - depending on installed packages - but FPC itself has no leaks, nor has the rtl, nor has the fcl.
--- End quote ---
Unlucky that you are unable to reproduce as I am able to do so on 3 different setups.
fwiw: I do not refer to Lazarus at all. I do hope my steps to reproduce showed that.
--- Quote ---(Anyway: let's get back to APL: any progress?)
--- End quote ---
Working on it. It is deeply buried into the RTL (seems to fight what I am trying to accomplish). I was unable to find a single example of an application that catches its own output/eror/input using native (linux) calls (the available c++ stream examples do not help in that regard) ergo uncharted territory.
TRon:
--- Quote from: PascalDragon on January 25, 2023, 10:17:08 pm ---This blanket statement is simply not true: The compiler, the RTL and the FCL can all three have leaks due to bugs. They should be reported with small examples that trigger the leak.
--- End quote ---
As shown below:
--- Code: ---$ cd /media/[SOME-RAMDISK]/
$ mkdir repo
$ cd repo
$ ls
$ git clone https://gitlab.com/freepascal.org/fpc/source.git fpc
$ cd fpc
$ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
$ git rev-parse HEAD
e8fcc5343beea4180e7e1f83bef6e27e19dde242
$ fpc -iV
3.2.2
$ export HEAPTRC=skipifnoleaks
$ make all OPT="-glh" &> build.log
--- End code ---
That will successfully build the FPC tree /with/ tracing enabled.
During build the traces indicate 6 problematic executables:
- fpc/compiler/ppc1
- fpc/compiler/ppc2
- fpc/compiler/ppcx64
- fpc/compiler/ppc3
- fpc/compiler/ppcwpo1
- fpc/utils/fpmake
Simply invoking those from a terminal (after the successful build) indicate they contain leaks. That is: /not/ even invoking any action by supplying parameters. The log shows that there are more problems when invoking those commands with a set of parameters. It would take time to investigate, unless the output from the build-log is enough.
Aside from the compiler the following utilities seem to behave problematic when invoked without any parameters:
- fpclasschart
- fpcmake
- fpdoc
- fppkg
- h2pas
- makeskell
- mka64ins
- mkarmins
- mkx86inl
- mkx86ins
- mkz80ins
- plex
- ptop
- pyacc
- unihelper
- webidlpas
As an example:
./fpclasschart
--- Code: ---fpClassTree - Create class tree from pascal sources
Version 3.3.1 [2023/01/26]
(c) 2008 - Michael Van Canneyt, michael@freepascal.org
Usage : fpclasschart [options]
Where [options] is one or more of :
--merge=filename Filename with object tree to merge.
--help Emit help.
--input=cmdline Input file to create skeleton for.
Use options are as for compiler.
--kind=objectkind Specify object kind. One of object, class, interface.
--lang=language Use selected language.
--output=filename Send output to file.
--format=name Kind of output to create: XML, PostScript, GraphViz.
Heap dump by heaptrc unit of "/media/ramdisk-8gb/fpc-arch/bin/fpclasschart"
37 memory blocks allocated : 3360/3424
34 memory blocks freed : 3029/3088
3 unfreed memory blocks : 331
True heap size : 425984
True free heap : 425024
Should be : 425072
Call trace for block $00007FE4B7B24260 size 144
Call trace for block $00007FE4B7B24100 size 144
Call trace for block $00007FE4B7B95300 size 43
--- End code ---
Navigation
[0] Message Index
[*] Previous page