[#46102] [ruby-trunk - Feature #6972][Open] 特化命令opt_emptyの追加 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
5 messages
2012/09/03
[#46105] 拡張ライブラリの質問 — SASADA Koichi <ko1@...>
ささだです.
12 messages
2012/09/04
[#46110] Re: 拡張ライブラリの質問
— "NARUSE, Yui" <naruse@...>
2012/09/05
成瀬です。
[#46112] Re: 拡張ライブラリの質問
— Urabe Shyouhei <shyouhei@...>
2012/09/05
On 09/05/2012 09:52 AM, NARUSE, Yui wrote:
[#46114] Re: 拡張ライブラリの質問
— "NARUSE, Yui" <naruse@...>
2012/09/05
2012年9月5日 11:11 Urabe Shyouhei <shyouhei@ruby-lang.org>:
[#46131] HaikuOS上でruby trunkのbuildが通るようになりました — Takashi Toyoshima <toyoshim@...>
こちらのMLでは初めてご挨拶させて頂きます、とよしまと申します。
7 messages
2012/09/12
[#46132] Re: HaikuOS上でruby trunkのbuildが通るようになりました
— KOSAKI Motohiro <kosaki.motohiro@...>
2012/09/12
> こちらのMLでは初めてご挨拶させて頂きます、とよしまと申します。
[#46159] [ruby-trunk - Feature #7047][Open] Add new C API: rb_newobj_with — "authorNari (Narihiro Nakamura)" <authorNari@...>
9 messages
2012/09/22
[#46162] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit — SASADA Koichi <ko1@...>
2点ほど.
4 messages
2012/09/25
[#46174] [ruby-trunk - Bug #7084][Open] RubyVM::InstructionSequence.compile("1+"*10000 + "1") causes SystemStackError or Segmentation Fault — "mrkn (Kenta Murata)" <muraken@...>
7 messages
2012/09/29
[ruby-dev:46157] [ruby-trunk - Bug #4911] timer_thread_function() が thead unsafe
From:
"kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
Date:
2012-09-22 00:44:01 UTC
List:
ruby-dev #46157
Issue #4911 has been updated by kosaki (Motohiro KOSAKI).
で、Comment#4のパッチだと残念なことにタイマースレッドとスレッド解放ルートに共通のロックがないため、グローバル変数に代入してもメモリバリア的な意味でthread_free() からは可視にならなさそう
----------------------------------------
Bug #4911: timer_thread_function() が thead unsafe
https://bugs.ruby-lang.org/issues/4911#change-29661
Author: kosaki (Motohiro KOSAKI)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0
ruby -v: trunk
どうして、これを先月気づかなかったのだろう。という罪悪感があるのですが、
target 1.9.x で起票します。
timer_thread_function()で vm->running_thread にアクセスするのは
thread unsafe な気がします
0.スレッドAがrunning_threadである
1.タイマースレッドがvm->running_threadをレジスタにのせる
(レジスタにスレッドAのアドレスがのっかる)
2.コンテキストスイッチ
3.スレッドAが終了。スレッドBがrunning_threadになる
4.スレッドAの rb_thead_t がfreeされる
5.コンテキストスイッチ
6.そんなkとはつゆしらず、タイマースレッドはスレッドAの
アドレスに対して th->interrupt_flag |= 1; するのでメモリ破壊
----------------------------------------------------------
static void
timer_thread_function(void *arg)
{
rb_vm_t *vm = GET_VM(); /* TODO: fix me for Multi-VM */
/* for time slice */
RUBY_VM_SET_TIMER_INTERRUPT(vm->running_thread); ※ここ
/* check signal */
rb_threadptr_check_signal(vm->main_thread);
}
--
http://bugs.ruby-lang.org/