Node-pty: ConPTYから受け取ったハンドルを適切に通します

作成日 2020年01月02日  ·  8コメント  ·  ソース: microsoft/node-pty

ConPTYはメインスレッドで管理しているため、ハングする可能性があります。

https://github.com/microsoft/terminal/issues/1810#issuecomment -570284546

https://github.com/microsoft/node-pty/blob/master/src/win/conpty.cc

bug help wanted

最も参考になるコメント

これは、ハードロックのクラッシュの影響を受けるユーザーの範囲を把握するために、このリポジトリで最も高く評価されているバグの問題でもあります。

全てのコメント8件

@Tyriarたぶん、別のスレッドでハンドルの終わりを移動し、メインスレッドからすべての参照を削除するだけで十分です。 これにより、conpty処理全体(スポーン->チャンク読み取り->クローズ)が独自のスレッドに存在する必要がある場合に発生する可能性がある、libuvIO処理に関する優先順位の問題を回避できます。 conptyコンシューマーが「解き放たれた」状態で実行されている場合は、xterm.jsまでセットアップする必要があるバッファーバックプレッシャ/フロー制御/同期を忘れないでください。

この問題に関する動きはありますか? 多くのvscodeユーザーにハングが発生します。

これは、ハードロックのクラッシュの影響を受けるユーザーの範囲を把握するために、このリポジトリで最も高く評価されているバグの問題でもあります。

この問題が原因で、VSCodeはまだ1日に約5回ハードロックされており、この関数を作成する必要がありました。
image

これは私のVSCodeの生活の質に数か月間最も影響を与える問題です。

クラッシュを確実に再現するnote-ptyスニペットをまとめることができました。

var os = require('os');
var pty = require('../..');

var isWindows = os.platform() === 'win32';
var shell = isWindows ? 'cmd.exe' : 'bash';

let i = 0;

setInterval(() => {
  console.log(`creating pty ${++i}`);
  var ptyProcess = pty.spawn(shell, [], {
    name: 'xterm-256color',
    cols: 80,
    rows: 26,
    cwd: isWindows ? process.env.USERPROFILE : process.env.HOME,
    env: Object.assign({ TEST: "Environment vars work" }, process.env),
    useConpty: true
  });

  ptyProcess.onData(data => console.log(`  data: ${data.replace(/\x1b|\n|\r/g, '_')}`));

  setInterval(() => {
    ptyProcess.write('echo foo\r'.repeat(50));
  }, 10);
  setTimeout(() => {
    console.log(`  killing ${ptyProcess.pid}...`);
    ptyProcess.kill();
    console.log(`  killing ${ptyProcess.pid} after`);
  }, 100);
}, 1200);

すなわち。 たくさんの書き込みが行われているときは、ptyを閉じます。

錆びたlldbデバッガーを使用するたびに、vscodeを確実にハングさせ、その後、ゴミ箱アイコンでターミナルを閉じることができます。 これは1か月前は問題ではありませんでしたが、現在は使用できません

@DzmitryFil "terminal.integrated.windowsEnableConpty": falseを設定して、Windows <= 1809システムに戻ることができます。

このページは役に立ちましたか?
0 / 5 - 0 評価