alex-ac/UniSched — Issue #29: Сделать возможность загружать больше одного модуля
Author: cra
Created: 2012-03-05 13:44:49+00:00
State: open

Сейчас при сборке с двумя модулями для UI (CLI и DummyUI), при попытке использования одно из них (в моём случае CLI, но я так понимаю, либо раз на раз не приходится, либо это просто специфика того, как они захардкодены в правилах сборки для cmake) получаем радостные проблемы:

[cra@pintsize 16:58:03 /tmp/uni]
$ LD_PRELOAD=`find -name libcli.so` ./src/raspisator
Hello constructor!
CommandLine Interface INIT
CommandLine Interface RUN
*** glibc detected *** ./src/raspisator: double free or corruption (fasttop): 0x08c8b710 ***
======= Backtrace: =========
/lib/libc.so.6(+0x725f2)[0xb74035f2]
/usr/lib/libstdc++.so.6(_ZdlPv+0x1f)[0xb762a38f]
/usr/lib/libstdc++.so.6(_ZNSs4_Rep10_M_destroyERKSaIcE+0x1b)[0xb761182b]
/usr/lib/libstdc++.so.6(+0x9586c)[0xb761186c]
/usr/lib/libstdc++.so.6(_ZNSsD1Ev+0x2e)[0xb76118de]
./src/modules/ui/libcli.so(_ZN6ModuleD2Ev+0x2e)[0xb77116c4]
./src/modules/ui/libcli.so(_ZN4Core10AbstractUID1Ev+0x56)[0xb77117f8]
/tmp/uni/src/modules/ui/libdummyui.so(_ZN14DummyInterfaceD1Ev+0x2b)[0xb770c0a7]
/lib/libc.so.6(__cxa_finalize+0xab)[0xb73c24db]
/tmp/uni/src/modules/ui/libdummyui.so(+0x3414)[0xb770b414]
/tmp/uni/src/modules/ui/libdummyui.so(+0x40fd)[0xb770c0fd]
/lib/libc.so.6(+0x31131)[0xb73c2131]
======= Memory map: ========
08048000-08050000 r-xp 00000000 00:0f 2403986 /tmp/uni/src/raspisator
08050000-08051000 rw-p 00008000 00:0f 2403986 /tmp/uni/src/raspisator
08c8a000-08cab000 rw-p 00000000 00:00 0 [heap]
b738d000-b7391000 rw-p 00000000 00:00 0
b7391000-b752c000 r-xp 00000000 08:01 2490934 /lib/libc-2.15.so
b752c000-b752e000 r--p 0019b000 08:01 2490934 /lib/libc-2.15.so
b752e000-b752f000 rw-p 0019d000 08:01 2490934 /lib/libc-2.15.so
b752f000-b7532000 rw-p 00000000 00:00 0
b7532000-b754e000 r-xp 00000000 08:01 3168203 /usr/lib/libgcc_s.so.1
b754e000-b754f000 rw-p 0001b000 08:01 3168203 /usr/lib/libgcc_s.so.1
b754f000-b7579000 r-xp 00000000 08:01 2490518 /lib/libm-2.15.so
b7579000-b757a000 r--p 00029000 08:01 2490518 /lib/libm-2.15.so
b757a000-b757b000 rw-p 0002a000 08:01 2490518 /lib/libm-2.15.so
b757b000-b757c000 rw-p 00000000 00:00 0
b757c000-b7659000 r-xp 00000000 08:01 3146954 /usr/lib/libstdc++.so.6.0.16
b7659000-b765d000 r--p 000dd000 08:01 3146954 /usr/lib/libstdc++.so.6.0.16
b765d000-b765e000 rw-p 000e1000 08:01 3146954 /usr/lib/libstdc++.so.6.0.16
b765e000-b7665000 rw-p 00000000 00:00 0
b7665000-b76e2000 r-xp 00000000 08:01 3166050 /usr/lib/libyaml-cpp.so.0.3.0
b76e2000-b76e3000 r--p 0007d000 08:01 3166050 /usr/lib/libyaml-cpp.so.0.3.0
b76e3000-b76e4000 rw-p 0007e000 08:01 3166050 /usr/lib/libyaml-cpp.so.0.3.0
b7706000-b7708000 rw-p 00000000 00:00 0
b7708000-b770d000 r-xp 00000000 00:0f 2386793 /tmp/uni/src/modules/ui/libdummyui.so
b770d000-b770e000 rw-p 00005000 00:0f 2386793 /tmp/uni/src/modules/ui/libdummyui.so
b770e000-b7713000 r-xp 00000000 00:0f 2403301 /tmp/uni/src/modules/ui/libcli.so
b7713000-b7714000 rw-p 00005000 00:0f 2403301 /tmp/uni/src/modules/ui/libcli.so
b7714000-b7715000 rw-p 00000000 00:00 0
b7715000-b7716000 r-xp 00000000 00:00 0 [vdso]
b7716000-b7736000 r-xp 00000000 08:01 2490948 /lib/ld-2.15.so
b7736000-b7737000 r--p 0001f000 08:01 2490948 /lib/ld-2.15.so
b7737000-b7738000 rw-p 00020000 08:01 2490948 /lib/ld-2.15.so
bf890000-bf8b1000 rw-p 00000000 00:00 0 [stack]
Aborted
[cra@pintsize 16:58:09 /tmp/uni]
$

Моя слепая гипотеза состоит в том, что нам где-то не хватает деструктора с явным освобождением памяти после выхода из run() текущего модуля. Но я не уверен в этом