Merge pull request #84 from atom/nested-fork
Use environment variable to detect whether to run as node. Fixed # 83.
This commit is contained in:
commit
a3e5b21118
4 changed files with 35 additions and 8 deletions
|
@ -2,6 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "content/public/app/content_main.h"
|
||||
|
@ -22,7 +23,8 @@ int Start(int argc, char *argv[]);
|
|||
int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
|
||||
int argc = 0;
|
||||
wchar_t** wargv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
|
||||
if (argc > 1 && wcscmp(wargv[1], L"--atom-child_process-fork") == 0) {
|
||||
char* node_indicator = getenv("ATOM_SHELL_INTERNAL_RUN_AS_NODE");
|
||||
if (node_indicator != NULL && strcmp(node_indicator, "1") == 0)
|
||||
// Convert argv to to UTF8
|
||||
char** argv = new char*[argc];
|
||||
for (int i = 0; i < argc; i++) {
|
||||
|
@ -57,8 +59,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
|
|||
}
|
||||
}
|
||||
// Now that conversion is done, we can finally start.
|
||||
argv[1] = argv[0];
|
||||
return node::Start(argc - 1, argv + 1);
|
||||
return node::Start(argc, argv);
|
||||
}
|
||||
|
||||
sandbox::SandboxInterfaceInfo sandbox_info = {0};
|
||||
|
@ -72,10 +73,9 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
|
|||
#include "app/atom_library_main.h"
|
||||
|
||||
int main(int argc, const char* argv[]) {
|
||||
if (argc > 1 && strcmp(argv[1], "--atom-child_process-fork") == 0) {
|
||||
argv[1] = argv[0];
|
||||
return node::Start(argc - 1, const_cast<char**>(argv + 1));
|
||||
}
|
||||
char* node_indicator = getenv("ATOM_SHELL_INTERNAL_RUN_AS_NODE");
|
||||
if (node_indicator != NULL && strcmp(node_indicator, "1") == 0)
|
||||
return node::Start(argc, const_cast<char**>(argv));
|
||||
|
||||
return AtomMain(argc, argv);
|
||||
}
|
||||
|
|
11
spec/fixtures/module/fork_ping.js
vendored
Normal file
11
spec/fixtures/module/fork_ping.js
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
process.on('uncaughtException', function(error) {
|
||||
process.send(error.stack);
|
||||
});
|
||||
|
||||
var child = require('child_process').fork(__dirname + '/ping.js');
|
||||
process.on('message', function(msg) {
|
||||
child.send(msg);
|
||||
});
|
||||
child.on('message', function (msg) {
|
||||
process.send(msg);
|
||||
});
|
|
@ -12,3 +12,19 @@ describe 'child_process', ->
|
|||
assert.equal msg, 'message'
|
||||
done()
|
||||
child.send 'message'
|
||||
|
||||
it 'should work in forked process', (done) ->
|
||||
child = child_process.fork path.join(fixtures, 'module', 'fork_ping.js')
|
||||
child.on 'message', (msg) ->
|
||||
assert.equal msg, 'message'
|
||||
done()
|
||||
child.send 'message'
|
||||
|
||||
it 'should work in forked process when options.env is specifed', (done) ->
|
||||
child = child_process.fork path.join(fixtures, 'module', 'fork_ping.js'),
|
||||
[],
|
||||
env: {test: 'somevar'}
|
||||
child.on 'message', (msg) ->
|
||||
assert.equal msg, 'message'
|
||||
done()
|
||||
child.send 'message'
|
||||
|
|
2
vendor/node
vendored
2
vendor/node
vendored
|
@ -1 +1 @@
|
|||
Subproject commit de1afc6cc609ed37863b1b0e919357f96000c6c4
|
||||
Subproject commit c2ecf615ac2bb846a38ffa0b64e9ce0ff4f8953b
|
Loading…
Reference in a new issue