Gauche > Archives > 2010/04/04

2010/04/04 12:06:46 UTCkenhys
#
同じくテストにパスしました(svn trunk)
2010/04/04 12:40:24 UTC齊藤
#
インポートテーブルを書き換え (APIフック) て全ての API 呼び出しの前後でキャンセルタイプ切り替えとか。 なんてことを妄想中。
2010/04/04 12:42:52 UTCshiro
#
うーん、setcanceltypeのオーバヘッドはどのくらいでしょうね。システムコールに比べて無視できる程度ならいいんですが、そうでなければブロッキングなコールに限りたいところです。
#
ローカルなフラグをいじるだけかな? それならいいんだけど。
2010/04/04 12:49:24 UTC齊藤
#
拡張を書く人にそのへんを意識させないで済ませるにはそういう方法があるかなぁという妄想の段階なので深く考えれてないです。
2010/04/04 12:55:53 UTC齊藤
#
選択的にフックを仕掛けることも出来るはずです。
2010/04/04 13:00:52 UTC齊藤
#
#define Sleep(s) \
    { int oldCancelType; \
      pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldCancelType); \
      Sleep(s); \
      pthread_setcanceltype(oldCancelType, NULL); }
#
win-compat.h に↑みたいなのを羅列するのが簡単ですかね。 それなら拡張に対してもフックを忍び込ませられますし。
2010/04/04 13:12:54 UTC齊藤
#
書きながら、そういえば C のマクロは再帰的に展開されなかったんだったと思い出して変な気分。
2010/04/04 13:22:57 UTCshiro
#
戻り値があるシステムコールだとちょいと面倒ですよ。gcc限定ならstatement expressionが使えるけど。
2010/04/04 13:27:25 UTC齊藤
#
一旦関数で包めば大丈夫かな。
2010/04/04 13:28:08 UTCshiro
#
関数で包むなら名前変えないと困りません?
#
ただまあ、windows threadにするにしても多分システム回りはいろいろ配慮が必要になるので、拡張書く人が気をつけなきゃならないってのはある程度は仕方ないかも。
#
スレッドセフティのことだけ考えても、いろいろ配慮は必要なわけですし。
2010/04/04 13:32:01 UTC齊藤
#
そうですね。 実際は少なからず OS 固有の機能を使ってしまうことってあると思います。