[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9470] [patch] segv in Hash.delete

From: Minero Aoki <aamine@...>
Date: 2000-03-22 12:55:34 UTC
List: ruby-dev #9470
あおきです。

次のスクリプトが落ちます。

h = { 1 => true, 2 => true }
h.each do |k,v|
  h.delete 1
end

こんな感じでしょうか。
-------------------------------------------------------------------
あおきみねろう

--- org.st.c	Wed Mar 22 21:30:18 2000
+++ st.c	Wed Mar 22 21:46:23 2000
@@ -435,7 +435,7 @@
     }
 
     for(; ptr != 0; ptr = ptr->next) {
-	if (EQUAL(table, ptr->key, *key)) {
+	if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {
 	    table->num_entries--;
 	    *key = ptr->key;
 	    if (value != 0) *value = ptr->record;
--- org.hash.c	Wed Mar 22 21:45:33 2000
+++ hash.c	Wed Mar 22 21:49:36 2000
@@ -411,10 +411,11 @@
     VALUE val;
 
     rb_hash_modify(hash);
-    if (RHASH(hash)->iter_lev > 0 &&
-	st_delete_safe(RHASH(hash)->tbl, &key, &val, Qundef)) {
-	FL_SET(hash, HASH_DELETED);
-	return val;
+    if (RHASH(hash)->iter_lev > 0) {
+	if (st_delete_safe(RHASH(hash)->tbl, &key, &val, Qundef)) {
+	    FL_SET(hash, HASH_DELETED);
+	    return val;
+	}
     }
     else if (st_delete(RHASH(hash)->tbl, &key, &val))
 	return val;

Wed Mar 22 21:49:36 2000  Minero Aoki  <aamine@dp.u-netsurf.ne.jp>

	* st.c (st_delete_safe): skip already deleted entry.

	* hash.c (rb_hash_delete): modify brace miss.

In This Thread

Prev Next