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

ruby-changes:22380

From: yugui <ko1@a...>
Date: Sun, 5 Feb 2012 12:35:02 +0900 (JST)
Subject: [ruby-changes:22380] yugui:r34429 (ruby_1_9_2): merges r32347 from trunk into ruby_1_9_2.

yugui	2012-02-05 12:27:37 +0900 (Sun, 05 Feb 2012)

  New Revision: 34429

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

  Log:
    merges r32347 from trunk into ruby_1_9_2.
    --
    * vm_insnhelper.c (vm_getivar): check vm state version
      to invalidate inline chache (ivar index).
      fixes Bug #4926.
    * vm_insnhelper.c (vm_setivar): ditto.

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/version.h
    branches/ruby_1_9_2/vm_insnhelper.c

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 34428)
+++ ruby_1_9_2/ChangeLog	(revision 34429)
@@ -1,3 +1,11 @@
+Fri Jul  1 08:21:28 2011  Koichi Sasada  <ko1@a...>
+
+	* vm_insnhelper.c (vm_getivar): check vm state version
+	  to invalidate inline chache (ivar index).
+	  fixes Bug #4926.
+
+	* vm_insnhelper.c (vm_setivar): ditto.
+
 Wed Feb  1 09:50:10 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* doc/re.rdoc (Repetition): fix typo.  reported by Ori Avtalion
Index: ruby_1_9_2/version.h
===================================================================
--- ruby_1_9_2/version.h	(revision 34428)
+++ ruby_1_9_2/version.h	(revision 34429)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.2"
-#define RUBY_PATCHLEVEL 313
+#define RUBY_PATCHLEVEL 314
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1
Index: ruby_1_9_2/vm_insnhelper.c
===================================================================
--- ruby_1_9_2/vm_insnhelper.c	(revision 34428)
+++ ruby_1_9_2/vm_insnhelper.c	(revision 34429)
@@ -1255,7 +1255,8 @@
 	VALUE val = Qundef;
 	VALUE klass = RBASIC(obj)->klass;
 
-	if (ic->ic_class == klass) {
+	if (LIKELY(ic->ic_class == klass &&
+		   ic->ic_vmstat == GET_VM_STATE_VERSION())) {
 	    long index = ic->ic_value.index;
 	    long len = ROBJECT_NUMIV(obj);
 	    VALUE *ptr = ROBJECT_IVPTR(obj);
@@ -1277,6 +1278,7 @@
 		    }
 		    ic->ic_class = klass;
 		    ic->ic_value.index = index;
+		    ic->ic_vmstat = GET_VM_STATE_VERSION();
 		}
 	    }
 	}
@@ -1309,7 +1311,8 @@
 	VALUE klass = RBASIC(obj)->klass;
 	st_data_t index;
 
-	if (ic->ic_class == klass) {
+	if (LIKELY(ic->ic_class == klass &&
+		   ic->ic_vmstat == GET_VM_STATE_VERSION())) {
 	    long index = ic->ic_value.index;
 	    long len = ROBJECT_NUMIV(obj);
 	    VALUE *ptr = ROBJECT_IVPTR(obj);
@@ -1325,6 +1328,7 @@
 	    if (iv_index_tbl && st_lookup(iv_index_tbl, (st_data_t)id, &index)) {
 		ic->ic_class = klass;
 		ic->ic_value.index = index;
+		ic->ic_vmstat = GET_VM_STATE_VERSION();
 	    }
 	    /* fall through */
 	}

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

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