Issue #9252 has been updated by phasis68 (Heesob Park). This issue is not solved with changeset r44241. Besides, r44241 caused segmentation fault. http://ruby-mswin.cloudapp.net/vc10-x64/ruby-trunk/log/20131216T101556Z.log.html.gz I found that this issue is related with the over optimization on Windows. Here is a workaround patch: diff --git a/thread.c b/thread.c.new index 39bb510..6985ee5 100644 --- a/thread.c +++ b/thread.c.new @@ -4754,6 +4754,12 @@ ident_hash_new(void) * the current __callee__. */ +#if defined(_MSC_VER) && defined(_M_AMD64) && _MSC_VER >= 1400 +# pragma optimize("", off) +#elif defined(__MINGW64_VERSION_MAJOR) +# pragma GCC push_options +# pragma GCC optimize ("O0") +#endif static VALUE recursive_list_access(void) { @@ -4774,6 +4780,11 @@ recursive_list_access(void) } return list; } +#if defined(_MSC_VER) && defined(_M_AMD64) && _MSC_VER >= 1400 +# pragma optimize("", on) +#elif defined(__MINGW64_VERSION_MAJOR) +# pragma GCC pop_options +#endif /* * Returns Qtrue iff obj_id (or the pair <obj, paired_obj>) is already ---------------------------------------- Bug #9252: "RuntimeError: can't add a new key into hash during iteration" error on test-all of objspace https://bugs.ruby-lang.org/issues/9252#change-43701 Author: ko1 (Koichi Sasada) Status: Closed Priority: Normal Assignee: ko1 (Koichi Sasada) Category: ext Target version: current: 2.1.0 ruby -v: ruby -v: ruby 2.1.0dev (2013-12-15 trunk 44222) [x64-mswin64_110] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN Now, some platforms have the following errors on "test-all TESTS=objspace". 1) Error: TestObjSpace#test_reachable_objects_from_root: RuntimeError: can't add a new key into hash during iteration C:/ko1/src/ruby/trunk/test/objspace/test_objspace.rb:109:in `hash' C:/ko1/src/ruby/trunk/test/objspace/test_objspace.rb:109:in `hash' C:/ko1/src/ruby/trunk/test/objspace/test_objspace.rb:109:in `reachable_objects_from_root' C:/ko1/src/ruby/trunk/test/objspace/test_objspace.rb:109:in `test_reachable_objects_from_root' ruby -v: ruby 2.1.0dev (2013-12-15 trunk 44222) [x64-mswin64_110] This problem is because of an issue of "ObjectSpace.reachable_objects_from_root". This method traverse all objects and insert it into a hash object to use as Set. To set hash object, a hash value is solved by the `hash' method and it uses `rb_exec_recursive' for some classes. `rb_exec_recursive' generates a hash object internally and this value is modified accidentally. This is current my assumption. For example, we track new objects after `ObjectSpace.reachable_objects_from_root' and avoid collection of such newer objects can solve this issue, but it will introduce performance impact (but this method is not performance critical, so it can be accepted). -- http://bugs.ruby-lang.org/