[#7271] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7272] [PATCH] OS X core dumps when $0 is changed and then loads shared libraries — noreply@...
Bugs item #3399, was opened at 2006-01-31 22:25
[#7274] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7277] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7280] Re: [PATCH] solaris 10 isinf and ruby_setenv fixes — ville.mattila@...
[#7286] Re: ruby-dev summary 28206-28273 — ara.t.howard@...
On Thu, 2 Feb 2006, Minero Aoki wrote:
mathew wrote:
mathew wrote:
I'm not sure we even need the 'with' syntax. Even if we do, it breaks
On 2006.02.07 10:03, Evan Webb wrote:
Umm, on what version are you seeing a warning there? I don't and never
On 2006.02.07 14:47, Evan Webb wrote:
I'd by far prefer it never emit a warning. The warning is assumes you
On Tue, 7 Feb 2006, Evan Webb wrote:
On Wed, 8 Feb 2006, Timothy J. Wood wrote:
[#7305] Re: Problem with weak references on OS X 10.3 — Mauricio Fernandez <mfp@...>
On Sun, Feb 05, 2006 at 08:33:40PM +0900, Christian Neukirchen wrote:
On Feb 5, 2006, at 5:05 AM, Mauricio Fernandez wrote:
On Wed, Feb 22, 2006 at 02:21:24PM +0900, Eric Hodel wrote:
Hi,
On Mon, Feb 27, 2006 at 12:45:28AM +0900, Yukihiro Matsumoto wrote:
On Sun, Feb 26, 2006 at 06:06:17PM +0100, Mauricio Fernandez wrote:
In article <20060226171117.GB29508@tux-chan>,
In article <1140968746.321377.18843.nullmailer@x31.priv.netlab.jp>,
Hi,
In article <m1FDshr-0006MNC@Knoppix>,
In article <87irr047sx.fsf@m17n.org>,
In article <87vev0hxu5.fsf@m17n.org>,
Just my quick 2 cents...
In article <92f5f81d0602281855g27e78f4eua8bf20e0b8e47b68@mail.gmail.com>,
Hi,
In article <m1FESAD-0001blC@Knoppix>,
Hi,
[#7331] Set containing duplicates — noreply@...
Bugs item #3506, was opened at 2006-02-08 22:52
[#7337] Parse error within Regexp — Bertram Scharpf <lists@...>
Hi,
Hi,
On Sun, Feb 12, 2006 at 01:34:55AM +0900, Yukihiro Matsumoto wrote:
[#7344] Ruby 1.8.4 on Mac OS X 10.4 Intel — Dae San Hwang <daesan@...>
Hi, all. This is my first time posting to this mailing list.
On Feb 12, 2006, at 6:14 AM, Dae San Hwang wrote:
[#7347] Latest change to eval.c — Kent Sibilev <ksruby@...>
It seems that the latest change to eval.c (1.616.2.154) has broken irb.
Hi,
Thanks, Matz.
[#7364] Method object used as Object#instance_eval block doesn't work (as expected) — noreply@...
Bugs item #3565, was opened at 2006-02-15 02:32
Hi,
Hi,
On Pr 2006-02-16 at 03:18 +0900, Yukihiro Matsumoto wrote:
[#7376] Minor tracer.rb patch — Daniel Berger <Daniel.Berger@...>
Hi,
[#7396] IO#reopen — Mathieu Bouchard <matju@...>
[#7403] Module#define_method "send hack" fails with Ruby 1.9 — Emiel van de Laar <emiel@...>
Hi List,
Emiel van de Laar <emiel@rednode.nl> writes:
Hi --
[#7439] FYI: ruby-lang.org is on spamcop blacklists — mathew <meta@...>
dnsbl/bl.spamcop.net returned deny: for
[#7442] GC Question — zdennis <zdennis@...>
I have been posting to the ruby-talk mailing list about ruby memory and GC, and I think it's ready
Hello.
Hello.
Symbols overlap ordinary objects, especially on OS X (Was: Re: Problem with weak references on OS X 10.3)
On Feb 5, 2006, at 5:05 AM, Mauricio Fernandez wrote:
> On Sun, Feb 05, 2006 at 08:33:40PM +0900, Christian Neukirchen wrote:
>> Caleb Clausen <vikkous@gmail.com> writes:
>>> 100_000.times{|n|
>>> o=Object.new;
>>> i=o.__id__;
>>> o2=ObjectSpace._id2ref(i);
>>> o.equal? o2 or raise "o=#{o}, i=#{"%x"%i}, o2=#{o2.inspect}, n=#
>>> {n}"
>>> }
>>
>> I can reproduce on ruby 1.8.4 (2005-12-24) [powerpc-darwin7.9.0]:
>>
>> o=#<Object:0x1d421c>, i=ea10e, o2=:reject, n=448 (RuntimeError)
>>
>> It looks like the object id wrapped in some way and now points to a
>> symbol? Clearly looks like a bug.
>
> 0x1d421c.to_s(2) # =>
> "111010100001000011100"
> 0xea10e.to_s(2) # =>
> "11101010000100001110"
> 0xea10e.class # => Fixnum
> (2 * 0xea10e).to_s(2) # =>
> "111010100001000011100"
>
> So far so good.
>
> Now, in gc.c:
>
> p0 = ptr = NUM2ULONG(id);
> if (ptr == Qtrue) return Qtrue;
> if (ptr == Qfalse) return Qfalse;
> if (ptr == Qnil) return Qnil;
> if (FIXNUM_P(ptr)) return (VALUE)ptr;
> if (SYMBOL_P(ptr) && rb_id2name(SYM2ID((VALUE)ptr)) != 0) {
> return (VALUE)ptr;
> }
>
> (SYMBOL_FLAG == 0x0e)
>
> NUM2ULONG is rb_num2ulong, which calls rb_num2long, which uses
> FIX2LONG.
> id was 111010100001000011101b and ptr becomes
> 11101010000100001110b, which
> matches the SYMBOL_FLAG.
>
> I'd conjecture that the above works on Linux because glibc's malloc
> () always
> returns 8-byte aligned memory addresses, which doesn't seem to be
> the case in
> OSX:
>
> 0x1d421c % 8 # => 4
OS X's malloc aligns memory on 16 byte boundaries. This problem is
not unique to OS X, you just need enough symbols.
> Another possibility would be that the address space for the data
> segment
> used in OSX is lower than on Linux, so the SYM2ID matches an existent
> symbol:
>
> RUBY_PLATFORM # => "i686-linux"
> Object.new.inspect # => "#<Object:
> 0xb7d44d7c>"
> 0xb7d44d7c >> 9 # => 6023718
> # we shouldn't have 6 million symbols
> 0x1d421c >> 9 # => 3745
> # but 4000 are indeed possible
If you're close enough to the beginning of memory ObjectSpace#_id2ref
will pick a Symbol over the real object like you mention above:
$ cat symbol_object_overlap.rb
N = 100_000
Objs = Array.new N
Syms = Array.new 200
STR = 'new_symbol_base'
def symbol_info
syms = Symbol.all_symbols.sort_by { |s| s.object_id }
min = syms.first
max = syms.last
puts "found #{syms.length} symbols"
puts "first symbol id: 0x%x (%p) last symbol id: 0x%x (%p)" %
[min.object_id, min, max.object_id, max]
end
def make_objs
N.times { |n| Objs[n] = Object.new }
puts "Made #{N} objects."
puts "Object ruby heap use:"
puts "start object_id <--> end object_id (range)"
first = Objs[0]
last = Objs[0]
Objs.each do |o|
if o.object_id > last.object_id then
fid = first.object_id
lid = last.object_id
puts "0x%x <--> 0x%x (%d)" % [lid, fid, fid - lid]
first = o
last = o
else
last = o
end
end
end
def make_more_syms
N.times do
STR.intern
STR.succ!
end
puts "Created #{N} new symbols"
end
def count_symbols
count = 0
Objs.each do |o|
if Symbol === ObjectSpace._id2ref(o.object_id) then
Syms[count] = o
count += 1
end
end
puts "Found #{count} symbols overlapping real objects in #{N}
objects lookups"
end
symbol_info
make_objs
count_symbols
make_more_syms
count_symbols
symbol_info
#Syms.each do |s|
# puts "0x%x: %p ==> %p" % [s.object_id, s, ObjectSpace._id2ref
(s.object_id)]
#end
On OS X, malloc starts allocating memory from a very low address, so
even the built-in symbols for a small program will overlap valid
object addresses:
$ uname -a
Darwin kaa.local 8.5.0 Darwin Kernel Version 8.5.0: Sun Jan 22
10:38:46 PST 2006; root:xnu-792.6.61.obj~1/RELEASE_PPC Power
Macintosh powerpc
$ ruby -v symbol_object_overlap.rb
ruby 1.8.4 (2005-12-24) [powerpc-darwin8.4.0]
found 940 symbols
first symbol id: 0x210e (:"!") last symbol id: 0x27510e (:count_symbols)
Made 100000 objects.
Object ruby heap use:
start object_id <--> end object_id (range)
0xd7800 <--> 0xe47d0 (53200)
0xe4820 <--> 0x1df716 (1027830)
0x282800 <--> 0x2d1996 (323990)
Found 41 symbols overlapping real objects in 100000 objects lookups
Created 100000 new symbols
Found 189 symbols overlapping real objects in 100000 objects lookups
found 101030 symbols
first symbol id: 0x210e (:"!") last symbol id: 0xc5c510e
(:new_symbol_gsqh)
FreeBSD starts returning memory from a much higher memory address so
symbol overlaps take much longer to occur:
$ uname -a
FreeBSD sandbox.robotcoop.com 4.10-RELEASE FreeBSD 4.10-RELEASE #0:
Wed Feb 23 15:47:08 CST 2005 root@fbsdbootload:/usr/obj/usr/src/
sys/theplanet i386
$ ruby -v symbol_object_overlap.rb
ruby 1.8.4 (2005-12-24) [i386-freebsd4]
found 931 symbols
first symbol id: 0x210e (:"!") last symbol id: 0x27090e (:count_symbols)
Made 100000 objects.
Object ruby heap use:
start object_id <--> end object_id (range)
0x4039000 <--> 0x404611a (53530)
0x4046142 <--> 0x40c3f16 (515540)
0x40c4000 <--> 0x4113196 (323990)
Found 0 symbols overlapping real objects in 100000 objects lookups
Created 100000 new symbols
Found 196 symbols overlapping real objects in 100000 objects lookups
found 101028 symbols
first symbol id: 0x210e (:"!") last symbol id: 0xc5c090e
(:new_symbol_gsqh)
--
Eric Hodel - drbrain@segment7.net - http://segment7.net
This implementation is HODEL-HASH-9600 compliant
http://trackmap.robotcoop.com