https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2022-02-09T08:52:37Z
Ruby Issue Tracking System
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96430
2022-02-09T08:52:37Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>すばらしい再現例をありがとうございます!<br>
次のパッチで直るとおもいます。</p>
<pre><code class="diff syntaxhl" data-language="diff"><span class="gh">diff --git a/st.c b/st.c
index 53e9dc8320..07a083abb0 100644
</span><span class="gd">--- a/st.c
</span><span class="gi">+++ b/st.c
</span><span class="p">@@ -1363,7 +1363,6 @@</span> st_shift(st_table *tab, st_data_t *key, st_data_t *value)
return 1;
}
}
<span class="gd">- tab->entries_start = tab->entries_bound = 0;
</span> if (value != 0) *value = 0;
return 0;
}
</code></pre>
<p>記録のためにチケットがほしいのですが、作っていただけますか?</p>
<p><a href="https://bugs.ruby-lang.org/projects/ruby-master/issues/new" class="external">https://bugs.ruby-lang.org/projects/ruby-master/issues/new</a></p>
<p>もしご面倒でしたら、代行して作成しますので言ってください。</p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96431
2022-02-09T08:52:38Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>すみません、メールからチケットを作る仕組みがあるのを忘れてました。<br>
それで作っておきました。</p>
<p><a href="https://bugs.ruby-lang.org/issues/18578" class="external">https://bugs.ruby-lang.org/issues/18578</a></p>
<p>続きはチケットの方に書こうと思います。</p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96432
2022-02-09T08:58:33Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>メモ:entries_bound は使用中のビン(DELETEDになったビンを含む)の数に(ほぼ)対応していて、これをみてテーブルをリビルドしている(rebuild_table_if_necessary)。空のハッシュに対する Hash#shift はなぜか entries_bound を 0 にしているので、リビルドすべきタイミングを逃し、ビンがすべて使用中になった状態で空きビンを探そうとするので無限ループに陥っていた(find_table_bin_ind)。</p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96433
2022-02-09T09:18:19Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Backport</strong> changed from <i>2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN</i> to <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED</i></li></ul>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96434
2022-02-09T09:30:22Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Description</strong> updated (<a title="View differences" href="/journals/96434/diff?detail_id=62018">diff</a>)</li></ul>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96435
2022-02-09T09:33:12Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p><a href="https://github.com/ruby/ruby/pull/5539" class="external">https://github.com/ruby/ruby/pull/5539</a></p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96441
2022-02-09T15:14:46Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>Applied in changeset <a class="changeset" title="st.c: Do not clear entries_bound when calling Hash#shift for empty hash tab->entries_bound is us..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/496591de96b261b8789332c7f8b2bfbd17658955">git|496591de96b261b8789332c7f8b2bfbd17658955</a>.</p>
<hr>
<p>st.c: Do not clear entries_bound when calling Hash#shift for empty hash</p>
<p>tab->entries_bound is used to check if the bins are full in<br>
rebuild_table_if_necessary.</p>
<p>Hash#shift against an empty hash assigned 0 to tab->entries_bound, but<br>
didn't clear the bins. Thus, the table is not rebuilt even when the bins<br>
are full. Attempting to add a new element into full-bin hash gets stuck.</p>
<p>This change stops clearing tab->entries_bound in Hash#shift.<br>
[Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Hash#shift を繰り返していると ruby が無応答になる。 (Closed)" href="https://bugs.ruby-lang.org/issues/18578">#18578</a>]</p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96537
2022-02-17T11:39:39Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Backport</strong> changed from <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED</i> to <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: DONE</i></li></ul><p>ruby_3_1 7fe0ebc4e7abd78501094cbb2d47918c8ff29f60 merged revision(s) 496591de96b261b8789332c7f8b2bfbd17658955.</p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=96817
2022-03-13T06:44:31Z
nagachika (Tomoyuki Chikanaga)
nagachika00@gmail.com
<ul><li><strong>Backport</strong> changed from <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED, 3.1: DONE</i> to <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE, 3.1: DONE</i></li></ul><p>ruby_3_0 f404b21f849af06fb8bbd4b87fdfb585e904d6c3 merged revision(s) 496591de96b261b8789332c7f8b2bfbd17658955.</p>
Ruby master - Bug #18578: Hash#shift を繰り返していると ruby が無応答になる。
https://bugs.ruby-lang.org/issues/18578?journal_id=97178
2022-04-07T14:28:50Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul><li><strong>Backport</strong> changed from <i>2.6: REQUIRED, 2.7: REQUIRED, 3.0: DONE, 3.1: DONE</i> to <i>2.6: WONTFIX, 2.7: DONE, 3.0: DONE, 3.1: DONE</i></li></ul>