GC.malloc_allocated_size and GC.malloc_allocations not available (#if CALC_EXACT_MALLOC_SIZE)

Hi, using Ruby 1.9.3 I cannot use methods GC.malloc_allocated_size and
GC.malloc_allocations, which theorically do exist:

Module: GC (Ruby 1.9.3)

Inspecting the gc.c file I’ve found at the end:

#if CALC_EXACT_MALLOC_SIZE
rb_define_singleton_method(rb_mGC, “malloc_allocated_size”,
gc_malloc_allocated_size, 0);
rb_define_singleton_method(rb_mGC, “malloc_allocations”,
gc_malloc_allocations, 0);
#endif

So it seems that in my system CALC_EXACT_MALLOC_SIZE is not set since
gc.c file also contains:

#define CALC_EXACT_MALLOC_SIZE 0

Why is it unavailable?

Iñaki Baz C. [email protected] wrote:

So it seems that in my system CALC_EXACT_MALLOC_SIZE is not set since
gc.c file also contains:

#define CALC_EXACT_MALLOC_SIZE 0

Why is it unavailable?

Enabling that breaks any C extensions that (incorrectly) mix
x{m,c,re}alloc() calls with regular free() and vice-versa.

Even worse, this breakage isn’t noticeable at build/compile time,
so it’s not easy to find/fix everywhere, especially if it’s not
in regular code paths.

Maybe Ruby should have a alternative alloc API that enforce this:
(rb_emalloc, rb_ecalloc, rb_erealloc, rb_efree) and we can deprecate
the x
one slowly without breaking existing extensions.

2011/12/1 Eric W. [email protected]:

Even worse, this breakage isn’t noticeable at build/compile time,
so it’s not easy to find/fix everywhere, especially if it’s not
in regular code paths.

Maybe Ruby should have a alternative alloc API that enforce this:
(rb_emalloc, rb_ecalloc, rb_erealloc, rb_efree) and we can deprecate
the x
one slowly without breaking existing extensions.

Thanks for the explanation, good to know.

BTW I will enable it to test my Ruby C extensions :slight_smile:

2011/12/1 Iñaki Baz C. [email protected]:

BTW I will enable it to test my Ruby C extensions :slight_smile:

Operation aborted. Neither ruby 1.9.3 compiles if I set:

#define CALC_EXACT_MALLOC_SIZE 1

~# ./configure --prefix=/usr/local/ --program-suffix=1.9.3
[…]

~# make
[…]
linking miniruby
*** glibc detected *** ./miniruby: free(): invalid pointer:
0x00000000014f4ed8 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x78a96)[0x2ab455ce8a96]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x2ab455cecd7c]
./miniruby[0x4e2619]
./miniruby(rb_reg_match+0x15)[0x4e2b85]
./miniruby[0x566798]
./miniruby[0x56b543]
./miniruby(rb_yield+0x47)[0x571a57]
./miniruby[0x47b0d8]
./miniruby(rb_ensure+0xab)[0x45816b]
./miniruby[0x48388c]
./miniruby[0x571006]
./miniruby[0x56521b]
./miniruby[0x56b543]
./miniruby(rb_iseq_eval_main+0xc0)[0x5725d0]
./miniruby[0x4553ba]
./miniruby(ruby_run_node+0x36)[0x4578b6]
./miniruby[0x415a69]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x2ab455c9130d]
./miniruby[0x415a99]
======= Memory map: ========
00400000-0061b000 r-xp 00000000 08:01 1454311
/usr/src/ruby-1.9.3-preview1/miniruby
0081a000-0081b000 r–p 0021a000 08:01 1454311
/usr/src/ruby-1.9.3-preview1/miniruby
0081b000-0081d000 rw-p 0021b000 08:01 1454311
/usr/src/ruby-1.9.3-preview1/miniruby
0081d000-0083a000 rw-p 00000000 00:00 0
013b1000-01619000 rw-p 00000000 00:00 0
[heap]
2ab45516a000-2ab45518b000 r-xp 00000000 08:01 262950
/lib/x86_64-linux-gnu/ld-2.13.so
2ab45518b000-2ab45518d000 rw-p 00000000 00:00 0
2ab45538a000-2ab45538b000 r–p 00020000 08:01 262950
/lib/x86_64-linux-gnu/ld-2.13.so
2ab45538b000-2ab45538d000 rw-p 00021000 08:01 262950
/lib/x86_64-linux-gnu/ld-2.13.so
2ab45538d000-2ab4553a5000 r-xp 00000000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4553a5000-2ab4555a4000 —p 00018000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4555a4000-2ab4555a5000 r–p 00017000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4555a5000-2ab4555a6000 rw-p 00018000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4555a6000-2ab4555aa000 rw-p 00000000 00:00 0
2ab4555aa000-2ab4555b1000 r-xp 00000000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4555b1000-2ab4557b0000 —p 00007000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4557b0000-2ab4557b1000 r–p 00006000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4557b1000-2ab4557b2000 rw-p 00007000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4557b2000-2ab4557b3000 rw-p 00000000 00:00 0
2ab4557b3000-2ab4557bc000 r-xp 00000000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4557bc000-2ab4559bc000 —p 00009000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4559bc000-2ab4559bd000 r–p 00009000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4559bd000-2ab4559be000 rw-p 0000a000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4559be000-2ab4559ec000 rw-p 00000000 00:00 0
2ab4559ec000-2ab455a6f000 r-xp 00000000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455a6f000-2ab455c6e000 —p 00083000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455c6e000-2ab455c6f000 r–p 00082000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455c6f000-2ab455c70000 rw-p 00083000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455c70000-2ab455e05000 r-xp 00000000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab455e05000-2ab456004000 —p 00195000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab456004000-2ab456008000 r–p 00194000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab456008000-2ab456009000 rw-p 00198000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab456009000-2ab456012000 rw-p 00000000 00:00 0
2ab456012000-2ab456a0d000 r–p 00000000 08:01 1308795
/usr/lib/locale/locale-archive
2ab456a0d000-2ab456b0e000 rw-p 00000000 00:00 0
2ab456b0e000-2ab456b0f000 —p 00000000 00:00 0
2ab456b0f000-2ab456b12000 rw-p 00000000 00:00 0
2ab456b12000-2ab456b19000 r–s 00000000 08:01 1319147
/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
2ab456b3e000-2ab456b53000 r-xp 00000000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab456b53000-2ab456d52000 —p 00015000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab456d52000-2ab456d53000 r–p 00014000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab456d53000-2ab456d54000 rw-p 00015000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab458000000-2ab458021000 rw-p 00000000 00:00 0
2ab458021000-2ab45c000000 —p 00000000 00:00 0
7fff5a668000-7fff5a689000 rw-p 00000000 00:00 0
[stack]
7fff5a707000-7fff5a708000 r-xp 00000000 00:00 0
[vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0
[vsyscall]
make: *** [.rbconfig.time] Abortado

-----Messaggio originale-----
Da: Iaki Baz C. [mailto:[email protected]]
Inviato: gioved 1 dicembre 2011 21:21
A: ruby-talk ML
Oggetto: GC.malloc_allocated_size and GC.malloc_allocations not
available
(#if CALC_EXACT_MALLOC_SIZE)

Hi, using Ruby 1.9.3 I cannot use methods GC.malloc_allocated_size and
GC.malloc_allocations, which theorically do exist:

Module: GC (Ruby 1.9.3)

Inspecting the gc.c file I’ve found at the end:

#if CALC_EXACT_MALLOC_SIZE
rb_define_singleton_method(rb_mGC, “malloc_allocated_size”,
gc_malloc_allocated_size, 0);
rb_define_singleton_method(rb_mGC, “malloc_allocations”,
gc_malloc_allocations, 0); #endif

So it seems that in my system CALC_EXACT_MALLOC_SIZE is not set since
gc.c
file also contains:

#define CALC_EXACT_MALLOC_SIZE 0

Why is it unavailable?


Iaki Baz C.
[email protected]


Caselle da 1GB, trasmetti allegati fino a 3GB e in piu’ IMAP, POP3 e
SMTP autenticato? GRATIS solo con Email.it http://www.email.it/f

Sponsor:
Capodanno a Riccione, Pacchetto Relax: Mezza Pensione + bagno turco +
solarium + massaggio. Wifi e parcheggio gratis. 2 giorni euro 199 a
persona
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid978&d)-12

-----Messaggio originale-----
Da: Iaki Baz C. [mailto:[email protected]]
Inviato: gioved 1 dicembre 2011 22:05
A: ruby-talk ML
Oggetto: Re: GC.malloc_allocated_size and GC.malloc_allocations not
available (#if CALC_EXACT_MALLOC_SIZE)

2011/12/1 Iaki Baz C. [email protected]:

BTW I will enable it to test my Ruby C extensions :slight_smile:

Operation aborted. Neither ruby 1.9.3 compiles if I set:

#define CALC_EXACT_MALLOC_SIZE 1

~# ./configure --prefix=/usr/local/ --program-suffix=1.9.3 […]

~# make
[…]
linking miniruby
*** glibc detected *** ./miniruby: free(): invalid pointer:
0x00000000014f4ed8 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x78a96)[0x2ab455ce8a96]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x2ab455cecd7c]
./miniruby[0x4e2619]
./miniruby(rb_reg_match+0x15)[0x4e2b85]
./miniruby[0x566798]
./miniruby[0x56b543]
./miniruby(rb_yield+0x47)[0x571a57]
./miniruby[0x47b0d8]
./miniruby(rb_ensure+0xab)[0x45816b]
./miniruby[0x48388c]
./miniruby[0x571006]
./miniruby[0x56521b]
./miniruby[0x56b543]
./miniruby(rb_iseq_eval_main+0xc0)[0x5725d0]
./miniruby[0x4553ba]
./miniruby(ruby_run_node+0x36)[0x4578b6]
./miniruby[0x415a69]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x2ab455c9130d]
./miniruby[0x415a99]
======= Memory map: ========
00400000-0061b000 r-xp 00000000 08:01 1454311
/usr/src/ruby-1.9.3-preview1/miniruby
0081a000-0081b000 r–p 0021a000 08:01 1454311
/usr/src/ruby-1.9.3-preview1/miniruby
0081b000-0081d000 rw-p 0021b000 08:01 1454311
/usr/src/ruby-1.9.3-preview1/miniruby
0081d000-0083a000 rw-p 00000000 00:00 0
013b1000-01619000 rw-p 00000000 00:00 0
[heap]
2ab45516a000-2ab45518b000 r-xp 00000000 08:01 262950
/lib/x86_64-linux-gnu/ld-2.13.so
2ab45518b000-2ab45518d000 rw-p 00000000 00:00 0
2ab45538a000-2ab45538b000 r–p 00020000 08:01 262950
/lib/x86_64-linux-gnu/ld-2.13.so
2ab45538b000-2ab45538d000 rw-p 00021000 08:01 262950
/lib/x86_64-linux-gnu/ld-2.13.so
2ab45538d000-2ab4553a5000 r-xp 00000000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4553a5000-2ab4555a4000 —p 00018000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4555a4000-2ab4555a5000 r–p 00017000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4555a5000-2ab4555a6000 rw-p 00018000 08:01 262952
/lib/x86_64-linux-gnu/libpthread-2.13.so
2ab4555a6000-2ab4555aa000 rw-p 00000000 00:00 0
2ab4555aa000-2ab4555b1000 r-xp 00000000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4555b1000-2ab4557b0000 —p 00007000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4557b0000-2ab4557b1000 r–p 00006000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4557b1000-2ab4557b2000 rw-p 00007000 08:01 261948
/lib/x86_64-linux-gnu/librt-2.13.so
2ab4557b2000-2ab4557b3000 rw-p 00000000 00:00 0
2ab4557b3000-2ab4557bc000 r-xp 00000000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4557bc000-2ab4559bc000 —p 00009000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4559bc000-2ab4559bd000 r–p 00009000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4559bd000-2ab4559be000 rw-p 0000a000 08:01 261955
/lib/x86_64-linux-gnu/libcrypt-2.13.so
2ab4559be000-2ab4559ec000 rw-p 00000000 00:00 0
2ab4559ec000-2ab455a6f000 r-xp 00000000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455a6f000-2ab455c6e000 —p 00083000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455c6e000-2ab455c6f000 r–p 00082000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455c6f000-2ab455c70000 rw-p 00083000 08:01 262956
/lib/x86_64-linux-gnu/libm-2.13.so
2ab455c70000-2ab455e05000 r-xp 00000000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab455e05000-2ab456004000 —p 00195000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab456004000-2ab456008000 r–p 00194000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab456008000-2ab456009000 rw-p 00198000 08:01 262034
/lib/x86_64-linux-gnu/libc-2.13.so
2ab456009000-2ab456012000 rw-p 00000000 00:00 0
2ab456012000-2ab456a0d000 r–p 00000000 08:01 1308795
/usr/lib/locale/locale-archive
2ab456a0d000-2ab456b0e000 rw-p 00000000 00:00 0
2ab456b0e000-2ab456b0f000 —p 00000000 00:00 0
2ab456b0f000-2ab456b12000 rw-p 00000000 00:00 0
2ab456b12000-2ab456b19000 r–s 00000000 08:01 1319147
/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
2ab456b3e000-2ab456b53000 r-xp 00000000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab456b53000-2ab456d52000 —p 00015000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab456d52000-2ab456d53000 r–p 00014000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab456d53000-2ab456d54000 rw-p 00015000 08:01 261678
/lib/x86_64-linux-gnu/libgcc_s.so.1
2ab458000000-2ab458021000 rw-p 00000000 00:00 0
2ab458021000-2ab45c000000 —p 00000000 00:00 0
7fff5a668000-7fff5a689000 rw-p 00000000 00:00 0
[stack]
7fff5a707000-7fff5a708000 r-xp 00000000 00:00 0
[vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0
[vsyscall]
make: *** [.rbconfig.time] Abortado


Iaki Baz C.
[email protected]


Caselle da 1GB, trasmetti allegati fino a 3GB e in piu’ IMAP, POP3 e
SMTP autenticato? GRATIS solo con Email.it http://www.email.it/f

Sponsor:
Capodanno a Riccione, Pacchetto Relax: Mezza Pensione + bagno turco +
solarium + massaggio. Wifi e parcheggio gratis. 2 giorni euro 199 a
persona
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid979&d)-12