Profile

アッキーソフト

176018 posts 187 follows 965 followers

Ejectコマンドユーザー会/Japanese Raspberry Pi UG/ミクだよ/松屋の卵浮かした
♨︎末代: @akkeisoft
♨︎Pawoo: @akkiesoft
♨︎こくだハイク: @akkiesoft
※ブーストをIFTTTでTwitterに転送するアカウントはブロブロ解除します

https://social.mikutter.hachune.net/@akkiesoft
アッキーソフト アッキーソフト reblogged at 6 years ago

もぐのもがないの moguno@social.mikutter.hachune.net

多分結論。

Fiberはrb_protect()経由で呼ばれたブロックの中でFiber.yeildを呼ぶと件のエラーが発生する。

rb_protect()はCで書かれた拡張ライブラリから、Rubyのブロックを呼ぶときに使う(ブロックで例外が発生したら、rb_protect()の戻り値がエラーになる。rb_protectを挟まないと呼び出し元まで例外が伝搬する。begin~rescueみたいなもん)

mikutterでは、DelayerはGtk.idle_add_priority()のコールバックを利用して動いている。

そしてGtk.idle_add_priorityはrb_protectを使ってコールバックを呼んでる。