[前][次][番号順一覧][スレッド一覧]

ruby-changes:10677

From: usa <ko1@a...>
Date: Wed, 11 Feb 2009 18:14:27 +0900 (JST)
Subject: [ruby-changes:10677] Ruby:r22240 (trunk): * gc.c (define_final, undefine_final): shouldn't add/remove finalizer

usa	2009-02-11 18:11:48 +0900 (Wed, 11 Feb 2009)

  New Revision: 22240

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22240

  Log:
    * gc.c (define_final, undefine_final): shouldn't add/remove finalizer
      of forzen objects.
    * gc.c (undefine_final): should remove FL_FINALIZE flag.
      [ruby-dev:37964] (also see [ruby-dev:37959])

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22239)
+++ ChangeLog	(revision 22240)
@@ -1,3 +1,11 @@
+Wed Feb 11 18:09:41 2009  NAKAMURA Usaku  <usa@r...>
+
+	* gc.c (define_final, undefine_final): shouldn't add/remove finalizer
+	  of forzen objects.
+
+	* gc.c (undefine_final): should remove FL_FINALIZE flag.
+	  [ruby-dev:37964] (also see [ruby-dev:37959])
+
 Wed Feb 11 17:37:41 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/lib/socket.rb (Socket.udp_server_sockets): call the block
Index: gc.c
===================================================================
--- gc.c	(revision 22239)
+++ gc.c	(revision 22240)
@@ -2261,9 +2261,11 @@
 undefine_final(VALUE os, VALUE obj)
 {
     rb_objspace_t *objspace = &rb_objspace;
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (finalizer_table) {
 	st_delete(finalizer_table, (st_data_t*)&obj, 0);
     }
+    FL_UNSET(obj, FL_FINALIZE);
     return obj;
 }
 
@@ -2283,6 +2285,7 @@
     VALUE obj, block, table;
 
     rb_scan_args(argc, argv, "11", &obj, &block);
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (argc == 1) {
 	block = rb_block_proc();
     }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]