はじめまして、坂本と申します。
開発しているアプリケーションで Node が不可思議な動きをしたので、もしご教示いただけることがあればと思い、投稿しました。

環境:
AWS 上で構築したサーバーです。
(CPU) Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz
(OS) Ubuntu 16.04.2 LTS
(Node) v6.11.0

現象:
以下のソース(1)で SIGSEGV エラーが発生し、プロセスが停止する。(2)、(3)、(4) では問題ない、(5) では SIGSEGV 発生。
実行オプションには
    --max_old_space_size=1024 --expose-gc 
がついており、process 自体は forever にて fork した child_process で動いています。

(*) catch 部分はすべて同じなので、 (2) 以降は省略しています。
この部分だけを単独実行しても再現はしない模様です。

(1)
var when = Promise.resolve();
when = when.then(function() {
  return new Promise(function(rsl, rej) {
     rej('THROW ERROR');  // => SIGSEGV
  });
});
when['catch'](function(e){
  console.log(e);
});

(2)
var when = Promise.resolve();
when = when.then(function() {
  return new Promise(function(rsl, rej) {
     rsl();  // => OK
  });
});

(3)
var when = Promise.resolve();
when = when.then(function() {
  return new Promise(function(rsl, rej) {
     process.nextTick(rej);  // => OK
  });
});

(4)
var when = Promise.resolve();
when = when.then(function() {
  return new Promise(function(rsl, rej) {
     setImmediate(rej);  // => OK
  });
});

(5)
var when = Promise.resolve();
when = when.then(function() {
  return new Promise(function(rsl, rej) {
     throw 'THROW ERROR' // => SIGSEGV
  });
});

同期的なエラーの throw に対して発生する、ということは現象的にわかっているのですが、
発生するようになる条件がわからない状況です。
よろしくお願いします。

-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには nodejs_jp+unsubscr...@googlegroups.com 
にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

メールによる返信