176018 posts 187 follows 965 followers
Ejectコマンドユーザー会/Japanese Raspberry Pi UG/ミクだよ/松屋の卵浮かした
♨︎末代: @akkeisoft
♨︎Pawoo: @akkiesoft
♨︎こくだハイク: @akkiesoft
※ブーストをIFTTTでTwitterに転送するアカウントはブロブロ解除します
多分結論。
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を使ってコールバックを呼んでる。