Wait for finished read, not for process exit in lp_optimizer

This commit is contained in:
Vitaliy Filippov
2026-02-04 02:33:08 +03:00
parent e9f37e8dc3
commit 0715feffa1
+8 -5
View File
@@ -10,16 +10,19 @@ const NO_OSD = 'Z';
async function lp_solve(text) async function lp_solve(text)
{ {
const cp = child_process.spawn('lp_solve'); const cp = child_process.spawn('lp_solve');
let stdout = '', stderr = '', finish_cb; let stdout = '', stderr = '', finish_cb, finished = 0;
cp.stdout.on('data', buf => stdout += buf.toString()); cp.stdout.on('data', buf => stdout += buf.toString());
cp.stderr.on('data', buf => stderr += buf.toString()); cp.stderr.on('data', buf => stderr += buf.toString());
cp.on('exit', () => finish_cb && finish_cb()); cp.stdout.on('end', () => finish_cb());
cp.stderr.on('end', () => finish_cb());
cp.stdin.write(text); cp.stdin.write(text);
cp.stdin.end(); cp.stdin.end();
if (cp.exitCode == null) await new Promise(ok => (finish_cb = () =>
{ {
await new Promise(ok => finish_cb = ok); finished++;
} if (finished == 2)
ok();
}));
if (!stdout.trim()) if (!stdout.trim())
{ {
return null; return null;