Profile

金具✅

45391 posts 614 follows 441 followers

アイコンは @akkiesoft 氏作

https://mstdn.kanagu.info/@cobodo
金具✅ 金具✅ 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を使ってコールバックを呼んでる。