[#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.
Re: GC Question
Sorry, I lied...
>STACK_END is more far from rb_gc_stack_start on 1.times { pause }
>(same thing happens on loop { pause }) this means ruby uses more stack
>on block execution.
>
>Because rb_gc_mark_locations marks all objects in the range of STACK_END to rb_gc_stack_start.
>if GC.start runs inside block, block needs more stack, so more objects can be wrongly
>marked as alive. (As you can see, last `pause` is outside of block, so less stack is used,
>huge array goes out of stack range, it is freed)
Index: gc.c
===================================================================
RCS file: /src/ruby/gc.c,v
retrieving revision 1.168.2.37
diff -u -w -b -p -r1.168.2.37 gc.c
--- gc.c 13 Feb 2006 09:10:53 -0000 1.168.2.37
+++ gc.c 28 Feb 2006 08:34:43 -0000
@@ -594,6 +594,18 @@ gc_mark_rest()
}
}
+static VALUE watching = 1;
+
+#define GET_WATCHING() (watching - 1)
+#define SET_WATCHING(value) (watching = value + 1)
+
+static VALUE
+rb_gc_watch(VALUE self, VALUE obj)
+{
+ SET_WATCHING(obj);
+ return Qnil;
+}
+
static inline int
is_pointer_to_heap(ptr)
void *ptr;
@@ -620,8 +632,14 @@ mark_locations_array(x, n)
register long n;
{
VALUE v;
+
while (n--) {
v = *x;
+ if (GET_WATCHING()) {
+ if (GET_WATCHING() == v) {
+ printf("---> %p\n", x);
+ }
+ }
if (is_pointer_to_heap((void *)v)) {
gc_mark(v, 0);
}
@@ -1148,6 +1166,12 @@ obj_free(obj)
break;
}
+ if (GET_WATCHING()) {
+ if (GET_WATCHING() == obj) {
+ SET_WATCHING(0);
+ }
+ }
+
if (FL_TEST(obj, FL_EXIVAR)) {
rb_free_generic_ivar((VALUE)obj);
}
@@ -1354,6 +1378,9 @@ garbage_collect()
setjmp(save_regs_gc_mark);
mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *));
#if STACK_GROW_DIRECTION < 0
+ if (GET_WATCHING()) {
+ printf("=============> %p %p\n", STACK_END, rb_gc_stack_start);
+ }
rb_gc_mark_locations((VALUE*)STACK_END, rb_gc_stack_start);
#elif STACK_GROW_DIRECTION > 0
rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)STACK_END + 1);
@@ -1926,6 +1953,7 @@ Init_GC()
rb_define_singleton_method(rb_mGC, "enable", rb_gc_enable, 0);
rb_define_singleton_method(rb_mGC, "disable", rb_gc_disable, 0);
rb_define_method(rb_mGC, "garbage_collect", rb_gc_start, 0);
+ rb_define_singleton_method(rb_mGC, "watch", rb_gc_watch, 1);
rb_mObSpace = rb_define_module("ObjectSpace");
rb_define_module_function(rb_mObSpace, "each_object", os_each_obj, -1);
///////////////////////////////////////
def format(num)
num.to_s.gsub(/(\d{1,3})(?=\d{3}+$)/) { $1 + "," }
end
def count(type)
count = 0
capacity = 0
ObjectSpace.each_object(type) do |o|
count += 1
capacity += o.capacity
end
puts "#{type}"
puts " count = #{format(count)}"
puts " capacity = #{format(capacity)}"
end
def pause(run_gc = true)
GC.enable
GC.start
GC.disable
count(String)
count(Array)
puts
sleep 5
end
class A
def run
arr = []
GC.watch(arr)
800000.times { arr << "d" * 7 }
pause
end
end
GC.disable
A.new.run
1.times { pause }
pause
///////////////////////////////////////
E:\ruby-cvs\win32_1_8>miniruby \a.rb
=============> 0012E4AC 0012FFFC
---> 0012E5D4
---> 0012E738
---> 0012EFF8
---> 0012F630
String
count = 800,111
capacity = 5,602,208
=============> 0012DD00 0012FFFC
---> 0012F630 # shalow enough ( > 0012ED38 )
String
count = 800,115
capacity = 5,602,270
=============> 0012ED38 0012FFFC
String
count = 112
capacity = 2,214