Bug 4490 - dlclose doesn't unload library from memory
Summary: dlclose doesn't unload library from memory
Status: RESOLVED FIXED
Alias: None
Product: uClibc
Classification: Unclassified
Component: Shared Library Support (show other bugs)
Version: 0.9.32
Hardware: Other Linux
: P5 minor
Target Milestone: ---
Assignee: Carmelo Amoroso
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-16 15:35 UTC by Yevgeny
Modified: 2011-11-23 16:06 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Yevgeny 2011-11-16 15:35:27 UTC
Platform: STx7105
Linux version: 2.6.23.17_stm23_0123
GCC version: 4.3.4 20091123

I load dynamic library with dlopen with flag LAZY, after unloading library with dlclose library is steel in memory.

/proc/$pid/status & /proc/$pid/maps file AFTER dlclose
Name:   dlclose-test
State:  S (sleeping)
Tgid:   424
Pid:    424
PPid:   418
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 32
Groups:
VmPeak:     1608 kB
VmSize:     1600 kB
VmLck:         0 kB
VmHWM:       392 kB
VmRSS:       392 kB
VmData:      348 kB
VmStk:        84 kB
VmExe:         4 kB
VmLib:      1116 kB
VmPTE:        12 kB
Threads:        1
SigQ:   0/2048
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
voluntary_ctxt_switches:        39
nonvoluntary_ctxt_switches:     0
00400000-00401000 r-xp 00000000 00:0c 1533030    /dlclose
00410000-00411000 rw-p 00000000 00:0c 1533030    /dlclose
00411000-00412000 rwxp 00411000 00:00 0          [heap]
29558000-2955e000 r-xp 00000000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2955e000-2955f000 r-xp 2955e000 00:00 0          [vdso]
2955f000-29561000 rw-p 2955f000 00:00 0
2956d000-2956e000 r--p 00005000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2956e000-2956f000 rw-p 00006000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2956f000-2957d000 r-xp 00000000 00:0c 1532637    /lib/libpthread-0.9.32.so
2957d000-2958c000 ---p 2957d000 00:00 0
2958c000-2958d000 r--p 0000d000 00:0c 1532637    /lib/libpthread-0.9.32.so
2958d000-2958e000 rw-p 0000e000 00:0c 1532637    /lib/libpthread-0.9.32.so
2958e000-29590000 rw-p 2958e000 00:00 0
29590000-29592000 r-xp 00000000 00:0c 1532587    /lib/libdl-0.9.32.so
29592000-295a1000 ---p 29592000 00:00 0
295a1000-295a2000 r--p 00001000 00:0c 1532587    /lib/libdl-0.9.32.so
295a2000-295a3000 rw-p 00002000 00:0c 1532587    /lib/libdl-0.9.32.so
295a3000-295ad000 r-xp 00000000 00:0c 1532636    /lib/libgcc_s.so.1
295ad000-295bc000 ---p 295ad000 00:00 0
295bc000-295bd000 rw-p 00009000 00:0c 1532636    /lib/libgcc_s.so.1
295bd000-2964f000 r-xp 00000000 00:0c 1532586    /lib/libuClibc-0.9.32.so
2964f000-2965e000 ---p 2964f000 00:00 0
2965e000-2965f000 r--p 00091000 00:0c 1532586    /lib/libuClibc-0.9.32.so
2965f000-29660000 rw-p 00092000 00:0c 1532586    /lib/libuClibc-0.9.32.so
29660000-29665000 rw-p 29660000 00:00 0
29665000-296ca000 r-xp 00000000 00:0c 1532849    /usr/lib/libsqlite3.so.0.8.6
296ca000-296da000 ---p 296ca000 00:00 0
296da000-296dc000 rw-p 00065000 00:0c 1532849    /usr/lib/libsqlite3.so.0.8.6
7bd9a000-7bdaf000 rwxp 7bfeb000 00:00 0          [stack]

BEFORE dlopen:
Name:   dlclose-test
State:  S (sleeping)
Tgid:   424
Pid:    424
PPid:   418
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 32
Groups:
VmPeak:     1124 kB
VmSize:     1120 kB
VmLck:         0 kB
VmHWM:       320 kB
VmRSS:       320 kB
VmData:      280 kB
VmStk:        84 kB
VmExe:         4 kB
VmLib:       712 kB
VmPTE:        12 kB
Threads:        1
SigQ:   0/2048
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
voluntary_ctxt_switches:        20
nonvoluntary_ctxt_switches:     0
00400000-00401000 r-xp 00000000 00:0c 1533030    /dlclose
00410000-00411000 rw-p 00000000 00:0c 1533030    /dlclose
29558000-2955e000 r-xp 00000000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2955e000-2955f000 r-xp 2955e000 00:00 0          [vdso]
2955f000-29561000 rw-p 2955f000 00:00 0
2956d000-2956e000 r--p 00005000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2956e000-2956f000 rw-p 00006000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2956f000-2957d000 r-xp 00000000 00:0c 1532637    /lib/libpthread-0.9.32.so
2957d000-2958c000 ---p 2957d000 00:00 0
2958c000-2958d000 r--p 0000d000 00:0c 1532637    /lib/libpthread-0.9.32.so
2958d000-2958e000 rw-p 0000e000 00:0c 1532637    /lib/libpthread-0.9.32.so
2958e000-29590000 rw-p 2958e000 00:00 0
29590000-29592000 r-xp 00000000 00:0c 1532587    /lib/libdl-0.9.32.so
29592000-295a1000 ---p 29592000 00:00 0
295a1000-295a2000 r--p 00001000 00:0c 1532587    /lib/libdl-0.9.32.so
295a2000-295a3000 rw-p 00002000 00:0c 1532587    /lib/libdl-0.9.32.so
295a3000-295ad000 r-xp 00000000 00:0c 1532636    /lib/libgcc_s.so.1
295ad000-295bc000 ---p 295ad000 00:00 0
295bc000-295bd000 rw-p 00009000 00:0c 1532636    /lib/libgcc_s.so.1
295bd000-2964f000 r-xp 00000000 00:0c 1532586    /lib/libuClibc-0.9.32.so
2964f000-2965e000 ---p 2964f000 00:00 0
2965e000-2965f000 r--p 00091000 00:0c 1532586    /lib/libuClibc-0.9.32.so
2965f000-29660000 rw-p 00092000 00:0c 1532586    /lib/libuClibc-0.9.32.so
29660000-29665000 rw-p 29660000 00:00 0
7bd9a000-7bdaf000 rwxp 7bfeb000 00:00 0          [stack]

AFTER dlopen:
Name:   dlclose-test
State:  S (sleeping)
Tgid:   424
Pid:    424
PPid:   418
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 32
Groups:
VmPeak:     1608 kB
VmSize:     1600 kB
VmLck:         0 kB
VmHWM:       388 kB
VmRSS:       388 kB
VmData:      348 kB
VmStk:        84 kB
VmExe:         4 kB
VmLib:      1116 kB
VmPTE:        12 kB
Threads:        1
SigQ:   0/2048
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
voluntary_ctxt_switches:        36
nonvoluntary_ctxt_switches:     0
00400000-00401000 r-xp 00000000 00:0c 1533030    /dlclose
00410000-00411000 rw-p 00000000 00:0c 1533030    /dlclose
00411000-00412000 rwxp 00411000 00:00 0          [heap]
29558000-2955e000 r-xp 00000000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2955e000-2955f000 r-xp 2955e000 00:00 0          [vdso]
2955f000-29561000 rw-p 2955f000 00:00 0
2956d000-2956e000 r--p 00005000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2956e000-2956f000 rw-p 00006000 00:0c 1532635    /lib/ld-uClibc-0.9.32.so
2956f000-2957d000 r-xp 00000000 00:0c 1532637    /lib/libpthread-0.9.32.so
2957d000-2958c000 ---p 2957d000 00:00 0
2958c000-2958d000 r--p 0000d000 00:0c 1532637    /lib/libpthread-0.9.32.so
2958d000-2958e000 rw-p 0000e000 00:0c 1532637    /lib/libpthread-0.9.32.so
2958e000-29590000 rw-p 2958e000 00:00 0
29590000-29592000 r-xp 00000000 00:0c 1532587    /lib/libdl-0.9.32.so
29592000-295a1000 ---p 29592000 00:00 0
295a1000-295a2000 r--p 00001000 00:0c 1532587    /lib/libdl-0.9.32.so
295a2000-295a3000 rw-p 00002000 00:0c 1532587    /lib/libdl-0.9.32.so
295a3000-295ad000 r-xp 00000000 00:0c 1532636    /lib/libgcc_s.so.1
295ad000-295bc000 ---p 295ad000 00:00 0
295bc000-295bd000 rw-p 00009000 00:0c 1532636    /lib/libgcc_s.so.1
295bd000-2964f000 r-xp 00000000 00:0c 1532586    /lib/libuClibc-0.9.32.so
2964f000-2965e000 ---p 2964f000 00:00 0
2965e000-2965f000 r--p 00091000 00:0c 1532586    /lib/libuClibc-0.9.32.so
2965f000-29660000 rw-p 00092000 00:0c 1532586    /lib/libuClibc-0.9.32.so
29660000-29665000 rw-p 29660000 00:00 0
29665000-296ca000 r-xp 00000000 00:0c 1532849    /usr/lib/libsqlite3.so.0.8.6
296ca000-296da000 ---p 296ca000 00:00 0
296da000-296dc000 rw-p 00065000 00:0c 1532849    /usr/lib/libsqlite3.so.0.8.6
7bd9a000-7bdaf000 rwxp 7bfeb000 00:00 0          [stack]
Comment 1 Carmelo Amoroso 2011-11-16 18:00:22 UTC
Hi, could you please post your config and also a test case ?
Also specify which version are you exactly using.

Is you are using uClibc shipped with STLinux distribution, please post a bug on bugzilla.stlinux.com
Comment 2 Yevgeny 2011-11-17 12:42:56 UTC
submitted bug https://bugzilla.stlinux.com/show_bug.cgi?id=15299
Comment 3 Carmelo Amoroso 2011-11-23 16:06:54 UTC
Fixed in master now. Thanks to Filippo.