Make everything use active evals (#30)
* Add trace log level * Use active eval to implement spdlog * Split server/client active eval interfaces Since all properties are *not* valid on both sides * +200% fire resistance * Implement exec using active evaluations * Fully implement child process streams * Watch impl, move child_process back to explicitly adding events Automatically forwarding all events might be the right move, but wanna think/discuss it a bit more because it didn't come out very cleanly. * Would you like some args with that callback? * Implement the rest of child_process using active evals * Rampant memory leaks Emit "kill" to active evaluations when client disconnects in order to kill processes. Most likely won't be the final solution. * Resolve some minor issues with output panel * Implement node-pty with active evals * Provide clearTimeout to vm sandbox * Implement socket with active evals * Extract some callback logic Also remove some eval interfaces, need to re-think those. * Implement net.Server and remainder of net.Socket using active evals * Implement dispose for active evaluations * Use trace for express requests * Handle sending buffers through evaluation events * Make event logging a bit more clear * Fix some errors due to us not actually instantiating until connect/listen * is this a commit message? * We can just create the evaluator in the ctor Not sure what I was thinking. * memory leak for you, memory leak for everyone * it's a ternary now * Don't dispose automatically on close or error The code may or may not be disposable at that point. * Handle parsing buffers on the client side as well * Remove unused protobuf * Remove TypedValue * Remove unused forkProvider and test * Improve dispose pattern for active evals * Socket calls close after error; no need to bind both * Improve comment * Comment is no longer wishy washy due to explicit boolean * Simplify check for sendHandle and options * Replace _require with __non_webpack_require__ Webpack will then replace this with `require` which we then provide to the vm sandbox. * Provide path.parse * Prevent original-fs from loading * Start with a pid of -1 vscode immediately checks the PID to see if the debug process launch correctly, but of course we don't get the pid synchronously. * Pass arguments to bootstrap-fork * Fully implement streams Was causing errors because internally the stream would set this.writing to true and it would never become false, so subsequent messages would never send. * Fix serializing errors and streams emitting errors multiple times * Was emitting close to data * Fix missing path for spawned processes * Move evaluation onDispose call Now it's accurate and runs when the active evaluation has actually disposed. * Fix promisifying fs.exists * Fix some active eval callback issues * Patch existsSync in debug adapter
This commit is contained in:
@ -122,12 +122,37 @@ index 8d182d18d9..69d51e1aea 100644
|
||||
@@ -132 +132 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
|
||||
- process.kill(initData.parentPid, 0); // throws an exception if the main process doesn't exist anymore.
|
||||
+ // process.kill(initData.parentPid, 0); // throws an exception if the main process doesn't exist anymore.
|
||||
diff --git a/src/vs/workbench/parts/debug/node/debugAdapter.ts b/src/vs/workbench/parts/debug/node/debugAdapter.ts
|
||||
index 2d798bf2df..9ccadacb3a 100644
|
||||
--- a/src/vs/workbench/parts/debug/node/debugAdapter.ts
|
||||
+++ b/src/vs/workbench/parts/debug/node/debugAdapter.ts
|
||||
@@ -315 +315 @@ export class ExecutableDebugAdapter extends StreamDebugAdapter {
|
||||
- return new Promise<void>((resolve, reject) => {
|
||||
+ return new Promise<void>(async (resolve, reject) => {
|
||||
@@ -320 +320 @@ export class ExecutableDebugAdapter extends StreamDebugAdapter {
|
||||
- if (!fs.existsSync(this.adapterExecutable.command)) {
|
||||
+ if (!(await require("util").promisify(fs.exists)(this.adapterExecutable.command))) {
|
||||
diff --git a/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts
|
||||
index e600fb2f78..1e0dc9a220 100644
|
||||
--- a/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts
|
||||
+++ b/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts
|
||||
@@ -934,0 +935 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop {
|
||||
+ return (require('vs/../../../../packages/vscode') as typeof import ('vs/../../../../packages/vscode')).client.handleExternalDrop(target, originalEvent);
|
||||
diff --git a/src/vs/workbench/parts/logs/electron-browser/logs.contribution.ts b/src/vs/workbench/parts/logs/electron-browser/logs.contribution.ts
|
||||
index 4015c9cd5d..bebdb25f6c 100644
|
||||
--- a/src/vs/workbench/parts/logs/electron-browser/logs.contribution.ts
|
||||
+++ b/src/vs/workbench/parts/logs/electron-browser/logs.contribution.ts
|
||||
@@ -31 +31,2 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
|
||||
- outputChannelRegistry.registerChannel({ id: Constants.mainLogChannelId, label: nls.localize('mainLog', "Main"), file: URI.file(join(environmentService.logsPath, `main.log`)), log: true });
|
||||
+ // This channel only seems to be used when loading the app and we skip all of that, so it is never actually created or written to.
|
||||
+ // outputChannelRegistry.registerChannel({ id: Constants.mainLogChannelId, label: nls.localize('mainLog', "Main"), file: URI.file(join(environmentService.logsPath, `main.log`)), log: true });
|
||||
diff --git a/src/vs/workbench/parts/output/common/outputLinkProvider.ts b/src/vs/workbench/parts/output/common/outputLinkProvider.ts
|
||||
index 63437034c9..acd82c8375 100644
|
||||
--- a/src/vs/workbench/parts/output/common/outputLinkProvider.ts
|
||||
+++ b/src/vs/workbench/parts/output/common/outputLinkProvider.ts
|
||||
@@ -77,0 +78,2 @@ export class OutputLinkProvider {
|
||||
+ // TODO@coder: get this working.
|
||||
+ return Promise.resolve([]);
|
||||
diff --git a/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughContentProvider.ts b/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughContentProvider.ts
|
||||
index 7b4e8721ac..96d612f940 100644
|
||||
--- a/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughContentProvider.ts
|
||||
|
@ -44,7 +44,7 @@ module.exports = (options = {}) => ({
|
||||
// These are meant to run in separate pages, like the issue reporter or
|
||||
// process explorer. Ignoring for now since otherwise their CSS is
|
||||
// included in the main CSS.
|
||||
test: /electron-browser.+\.html$|code\/electron-browser\/.+\.css$/,
|
||||
test: /test|electron-browser.+\.html$|code\/electron-browser\/.+\.css$/,
|
||||
use: [{
|
||||
loader: "ignore-loader",
|
||||
}],
|
||||
|
Reference in New Issue
Block a user