есть особенность: бинарники, собранные с отладкой в GTK2 кажут утечку
остальные (qt4/5) - все ОК.
есть мнение, что "текет" именно в slackware.
(проверял на обоих 14.2 и 15.0, карент еще не трогал)
протестировал на ubuntu 22.x/23.x - там все нормально с "этим"
причем, бинарники, собранные в slackware - не текут в ubuntu
ИТАК, как промежуточный итог считаем, что:
- текут системные библиотеки у slackware
- текут именно gtk2
рабочий/develop дистр меняться не будет.
хотелось-бы разобраться чуть более подробно что/где/почему
и что-бы по возможности "обходить эти грабли".
советы/идеи/пендили?!
исходные:
- Код: Выделить всё
- Lazarus 3.2.0/3.4.0 (от версии не зависит)
- backend gtk2/qt4/qt5
- fpc 3.2.2
- slackware 14.2/15.0
- qt4-4.8.7
- qt5-5.12.8
- gtk+2.24.31 (slackware-14.2) - текет
- gtk+2.24.33 (slackware-15.0) - текет
- gtk2-engines-2.21.0 (slackware)
- gtk+2.24.33 (ubuntu 22.04.4) - не текет
- gtk2-engines-2.20.2 (ubuntu 22.04.4)
в утечках "указывались" 2е мои функции,
- Код: Выделить всё
- parser.check ()
- form_icon_set()
реакция на "отключение" вызовов
- Код: Выделить всё
//
// form_icon_set() to on
//
3511 memory blocks allocated : 2120433/2126608
3509 memory blocks freed : 2120209/2126384
2 unfreed memory blocks : 224
True heap size : 1933312
True free heap : 1932608
Should be : 1932704
Call trace for block $00007F05DDD20FC0 size 112
$00000000004662DF FormCreate, line 438 of unit1.pas -> form_icon_set()
$000000000044F9B6 DOCREATE, line 922 of include/customform.inc
Call trace for block $00007F05DDD1EEC0 size 112
$00000000005E9FD4 INITKEYBOARDTABLES, line 3482 of gtk2/gtk2proc.inc
$000000000041F046 $main, line 33 of prj1.lpr -> Application.Initialize()
$000000000041EF60 $main, line 22 of prj1.lpr -> parser.check()
//
// form_icon_set() to off
//
3445 memory blocks allocated : 2111409/2117584
3443 memory blocks freed : 2111185/2117360
2 unfreed memory blocks : 224
True heap size : 1933312
True free heap : 1932608
Should be : 1932704
Call trace for block $00007FF1CFEA3FC0 size 112
Call trace for block $00007FF1CFEA1EC0 size 112
$00000000005E9E64 INITKEYBOARDTABLES, line 3482 of gtk2/gtk2proc.inc
$000000000041F046 $main, line 33 of prj1.lpr -> Application.Initialize()
$000000000041EF60 $main, line 22 of prj1.lpr -> parser.check()
//
// parser.check () to off
// form_icon_set() to off
//
3396 memory blocks allocated : 2102397/2108336
3394 memory blocks freed : 2102173/2108112
2 unfreed memory blocks : 224
True heap size : 1900544
True free heap : 1899840
Should be : 1899936
Call trace for block $00007F395BF1BFC0 size 112
Call trace for block $00007F395BF19EC0 size 112
$00000000005E9E04 INITKEYBOARDTABLES, line 3482 of gtk2/gtk2proc.inc
$000000000041EFED $main, line 33 of prj1.lpr -> Application.Initialize()
### UPDATE 1 ###
URL1
- Код: Выделить всё
valgrind --tool=memcheck --leak-check=full --log-file=log.txt --show-reachable=yes --num-callers=50 ./xxx
main$ grep leak log.txt -> void
main$ grep error log.txt
==20136== Memcheck, a memory error detector
==20136== by 0x52C3674: gdk_error_trap_push (in /usr/lib64/libgdk-x11-2.0.so.0.2400.31)
==20136== by 0x52C3681: gdk_error_trap_push (in /usr/lib64/libgdk-x11-2.0.so.0.2400.31)
==20136== by 0x505F626: _dlerror_run (in /lib64/libdl-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x505F570: _dlerror_run (in /lib64/libdl-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x505F570: _dlerror_run (in /lib64/libdl-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x505F570: _dlerror_run (in /lib64/libdl-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x4010503: _dl_catch_error (in /lib64/ld-2.23.so)
==20136== by 0x505F570: _dlerror_run (in /lib64/libdl-2.23.so)
==20136== For lists of detected and suppressed errors, rerun with: -s
==20136== ERROR SUMMARY: 36 errors from 36 contexts (suppressed: 0 from 0)
### UPDATE 2 ###
ой-вей! проявилась еще более интересная особенность:
- собираем "пустой проект" - ни чего не текет.
- запускаем "дырявый проект" (*) - в какой-то момент начинает течь.
- запускаем "пустой проект" - аналогично, начинает течь.
(*) - дело в том, что "сообщение об утечке" может появиться не сразу (как там в голове у "него" шарахнет), но если появилость - то всЁ, мы потекли...
дополнительно: замечено что из-за virtual-box иногда приходиться перегружать систему (начинают проявляться всякие хреньки в работе всей системы)
промежуточный ИТОГ:
- а собственно, подтверждает пред. выкладки: текет GTK2 в той или иной степени, причем с фишками и плюшками