[#42338] [Ruby 1.9-Bug#3907][Open] WIN32OLE_TYPELIB Can't load while envvar in the pathname . — Akio Tajima <redmine@...>
Bug #3907: WIN32OLE_TYPELIB Can't load while envvar in the pathname .
[#42345] [Ruby 1.9-Feature#3917][Open] [proposal] called_from() which is much faster than caller() — makoto kuwata <redmine@...>
Feature #3917: [proposal] called_from() which is much faster than caller()
ささだです。
桑田です。日本語が文字化けしてたようで申し訳ないです。
桑田さん
[#42369] [BUG: trunk] Lazy sweep and ObjectSpace.each_object — SASADA Koichi <ko1@...>
ささだです。
まつもと ゆきひろです
ささだです。
nariです。
ささだです。
[#42375] [Ruby 1.9-Feature#3946][Open] Array#packのqQ指定子に機種依存サイズフラグ!を追加 — Yui NARUSE <redmine@...>
Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
2010年10月14日15:36 Yui NARUSE <redmine@ruby-lang.org>:
(2010/10/14 21:07), Tanaka Akira wrote:
2010年10月14日21:29 NARUSE, Yui <naruse@airemix.jp>:
2010年10月18日13:26 Tanaka Akira <akr@fsij.org>:
2010年10月18日14:04 NARUSE, Yui <naruse@airemix.jp>:
チケット #3946 が更新されました。 (by Usaku NAKAMURA)
2010年11月25日10:57 Usaku NAKAMURA <redmine@ruby-lang.org>:
こんにちは、なかむら(う)です。
2012年2月9日16:47 U.Nakamura <usa@garbagecollect.jp>:
[#42376] [Ruby 1.9-Feature#3947][Open] Array#packのにエンディアン指定修飾子</>を追加 — Yui NARUSE <redmine@...>
Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
チケット #3947 が更新されました。 (by Yui NARUSE)
2010年10月14日21:36 Yui NARUSE <redmine@ruby-lang.org>:
2010年10月15日8:01 Tanaka Akira <akr@fsij.org>:
[#42403] [Ruby 1.9-Bug#3956][Open] format() の %a 指定子で幅指定が正しく機能しない — tadayoshi funaba <redmine@...>
Bug #3956: format() の %a 指定子で幅指定が正しく機能しない
2010年10月17日23:21 tadayoshi funaba <redmine@ruby-lang.org>:
> 2010年10月17日23:21 tadayoshi funaba <redmine@ruby-lang.org>:
> > 2010年10月17日23:21 tadayoshi funaba <redmine@ruby-lang.org>:
[#42420] [Ruby 1.9-Feature#3961][Open] printfと精度指定と負の値と — Yui NARUSE <redmine@...>
Feature #3961: printfと精度指定と負の値と
[#42464] [Ruby 1.9-Bug#3990][Assigned] tests of rexml/rss reports many errors and failures without iconv — Usaku NAKAMURA <redmine@...>
Bug #3990: tests of rexml/rss reports many errors and failures without iconv
チケット #3990 が更新されました。 (by Kouhei Sutou)
成瀬です。
須藤です。
(2010/11/02 21:50), Kouhei Sutou wrote:
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
(2010/11/06 12:10), Kouhei Sutou wrote:
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
成瀬です。
須藤です。
> iconv.soがない環境でtest-allを実行すると、rexmlとrssのテストで
[#42469] Re: [ruby-cvs:36800] Ruby:r29603 (trunk): * object.c (Init_Object), constant.h, variable.c — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
遠藤です。
[#42477] [Ruby 1.9-Feature#3995][Open] Hash#update with Enumerable — Nobuyoshi Nakada <redmine@...>
Feature #3995: Hash#update with Enumerable
[#42480] memory profiler for test-all — SASADA Koichi <ko1@...>
ささだです。
ささだです。
[ruby-dev:42417] Re: [BUG: trunk] Lazy sweep and ObjectSpace.each_object
nariです。
Lazy sweep 禁止フラグを作りました。
反対がなければコミットしたいと思います。
callbackの途中でGCが呼ばれてSEGVを起こすようなコードを作成し、通ることを確認しました。
make checkも通ることを確認しています。
確認コード:
loop {
GC.disable
10.times do
a = []
1000.times{ a << "" }
a.dup
end
GC.enable
ObjectSpace.each_object(Array) do |a|
a.map(&:object_id)
10000.times{''.dup}
end
}
パッチ:
diff --git a/gc.c b/gc.c
index b011f4a..a9a4560 100644
--- a/gc.c
+++ b/gc.c
@@ -332,6 +332,7 @@ typedef struct rb_objspace {
} heap;
struct {
int dont_gc;
+ int dont_lazy_sweep;
int during_gc;
} flags;
struct {
@@ -2040,6 +2041,17 @@ lazy_sweep(rb_objspace_t *objspace)
return FALSE;
}
+static void
+rest_sweep(rb_objspace_t *objspace)
+{
+ if (objspace->heap.sweep_slots) {
+ while (objspace->heap.sweep_slots) {
+ lazy_sweep(objspace);
+ }
+ after_gc_sweep(objspace);
+ }
+}
+
static void gc_marks(rb_objspace_t *objspace);
static int
@@ -2047,6 +2059,9 @@ gc_lazy_sweep(rb_objspace_t *objspace)
{
int res;
+ if (objspace->flags.dont_lazy_sweep)
+ return garbage_collect(objspace);
+
INIT_GC_PROF_PARAMS;
if (!ready_to_gc(objspace)) return TRUE;
@@ -2536,6 +2551,9 @@ rb_objspace_each_objects(int (*callback)(void
*vstart, void *vend,
rb_objspace_t *objspace = &rb_objspace;
volatile VALUE v;
+ rest_sweep(objspace);
+ objspace->flags.dont_lazy_sweep = TRUE;
+
i = 0;
while (i < heaps_used) {
while (0 < i && (uintptr_t)membase <
(uintptr_t)objspace->heap.sorted[i-1].slot->membase)
@@ -2562,6 +2580,7 @@ rb_objspace_each_objects(int (*callback)(void
*vstart, void *vend,
}
}
+ objspace->flags.dont_lazy_sweep = FALSE;
return;
}
--
Narihiro Nakamura (nari)