From 3b1c19a090c9ce442fc62b0efc5048d11f41964e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Tue, 11 Feb 2020 17:34:55 +0100 Subject: [PATCH] [Ivette/server] use per-process socket io --- Ivette/src/dome/src/misc/system.js | 7 +++++++ Ivette/src/frama-c/server.js | 31 +++++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/Ivette/src/dome/src/misc/system.js b/Ivette/src/dome/src/misc/system.js index 51ffe3de75b..0e609adc0f9 100644 --- a/Ivette/src/dome/src/misc/system.js +++ b/Ivette/src/dome/src/misc/system.js @@ -143,6 +143,12 @@ export function getDownloads() { return appProxy.getPath('downloads'); } */ export function getWorkingDir() { return command_wdir; } +/** + @summary Returns the current process ID. + @return {number} `process.pid` + */ +export function getPID() { return process.pid; } + /** @summary Command-line arguments (Application Window). @return {Array.<string>} command-line arguments @@ -639,6 +645,7 @@ export default { getWorkingDir, getArguments, getStatic, + getPID, join, resolve, dirname, basename, extname, fileStat, isFile, readFile, writeFile, copyFile, diff --git a/Ivette/src/frama-c/server.js b/Ivette/src/frama-c/server.js index 14a4bd11816..37cd6bf32d8 100644 --- a/Ivette/src/frama-c/server.js +++ b/Ivette/src/frama-c/server.js @@ -279,7 +279,7 @@ export function clear() { @param {string} [config.cwd] - Working directory (default: current) @param {string} [config.command] - Server command (default: `frama-c`) @param {Array.<string>} [config.params] - Additional server arguments (default: empty) - @param {string} [config.sockaddr] - Server socket (default: `ipc:///.frama-c.socket.io`) + @param {string} [config.sockaddr] - Server socket (default: `ipc:///.frama-c.<pid>.io`) @param {number} [config.timeout] - Shutdown timeout before server is hard killed, in milliseconds (default: 300ms) @param {number} [config.polling] - Server polling period, in milliseconds (default: 50ms) @param {string} [config.logout] - Process stdout log file (default: `undefined`) @@ -298,8 +298,26 @@ async function _launch() { _reset(); if (!config) throw('Frama-C Server not configured'); let { env, cwd, command='frama-c', params=[], sockaddr, logout, logerr } = config; + + buffer.clear(); + buffer.append('$',command); + params.forEach((argv) => { + if (argv.startsWith('-') || argv.endsWith('.c') || argv.endsWith('.i') || argv.endsWith('.h')) + buffer.append('\n '); + buffer.append(' '); + buffer.append(argv); + }); + buffer.append('\n'); + if (!cwd) cwd = System.getWorkingDir(); - if (!sockaddr) sockaddr = 'ipc://' + System.join( cwd , '.frama-c.socket.io' ); + if (!sockaddr) { + let socketfile = System.join(cwd,'.frama-c.' + System.getPID() + '.io'); + System.atExit(() => { + System.remove(socketfile); + console.log('REMOVE',socketfile); + }); + sockaddr = 'ipc://' + socketfile ; + } logout = logout && System.join( cwd, logout ); logerr = logerr && System.join( cwd, logerr ); params = params.concat('-then','-server-zmq',sockaddr ); @@ -312,15 +330,6 @@ async function _launch() { // Launch Process const process = await System.spawn( command, params, options ); const kill = () => process.kill() ; - buffer.clear(); - buffer.append('$',command); - params.forEach((argv) => { - if (argv.startsWith('-') || argv.endsWith('.c') || argv.endsWith('.i') || argv.endsWith('.h')) - buffer.append('\n '); - buffer.append(' '); - buffer.append(argv); - }); - buffer.append('\n'); const logger = (text) => { buffer.append(text); if (0 <= text.indexOf('\n')) -- GitLab