@ystk_skm です。

トラブルの原因がわかりました。

https://gist.github.com/3049876

上記ソースを実行するとログは

----
 d0: d0 Timeout
 d0: ENOENT, open 'aaa'
----

と出力されます。

私の予想は
----
 d0: d0 Timeout
----
でした。

誤解の原因は uncaughtException によってその domain は自動的に無効化するであろう
と予測していたためです。

実際には domain を dispose してやる必要があるようですね。
ソースのL:14 - L:17を

d.on('error', function(err) {

    clearTimeout(timer);

    console.log(name + ':', err.message);

  });

=>

d.on('error', function(err) {

    clearTimeout(timer), d.dispose();

    console.log(name + ':', err.message);

  });
とすることで予想通りの結果を得ることが出来ました。
また本体に適用すると疑問が生じるかもしれませんが、とりあえず問題解決出来た気になってます。
大津さん、小林さん、ありがとうございました。
コメントがあれば引き続きよろしくお願いします。


小林さん
> ドメインに関連づけられた 
> コールバック関数や EventEmitter のリスナ関数が 
> 呼び出される際,そのドメインの enter() が 
> 呼び出されるので,複数のドメインが存在していても, 
> 適切なドメインがアクティブになるようになってます. 
アドバイスありがとうございました。
timerに関して言えば timer.js L:200 (v0.8.1) で timer に processのdomainを記憶させてるんですね。
そして自分が呼び出される時にそのdomainにenterすると。シンプルですね(^^)


メールによる返信