From d8437ae3eaade8d73cf9eadba45e1788ee22ea4c Mon Sep 17 00:00:00 2001 From: Paddy Byers Date: Tue, 22 Nov 2011 23:49:18 +0000 Subject: [PATCH 1/2] Process symlinked shared library as .node --- lib/module.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/module.js b/lib/module.js index a5963545b8d..3ec7e1ef17c 100644 --- a/lib/module.js +++ b/lib/module.js @@ -458,11 +458,11 @@ Module._extensions['.json'] = function(module, filename) { }; -//Native extension for .node +//Native extension for .node and OS-specific equivalents Module._extensions['.node'] = function(module, filename) { process.dlopen(filename, module.exports); }; - +Module._extensions['.dylib'] = Module._extensions['.node']; // bootstrap main module. Module.runMain = function() { From 3211e255df77b0e8b4000bf26f09cfd8169e3367 Mon Sep 17 00:00:00 2001 From: Paddy Byers Date: Wed, 30 Nov 2011 19:53:21 +0000 Subject: [PATCH 2/2] Add support for an exithandler being called on isolate exit --- src/node.cc | 3 ++- src/node.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/node.cc b/src/node.cc index d0da64f065d..53f0248d0ef 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2539,7 +2539,7 @@ int Isolate::Start(uv_thread_shared_t *hnd) { RETURN_ON_EXIT(exit_status); EmitExit(process); - + if(exitHandler) exitHandler(); #ifndef NDEBUG // Clean up. context.Dispose(); @@ -2578,6 +2578,7 @@ Isolate::Isolate() { exit_status = 0; term_signal = 0; loop_ = (this == &defaultIsolate) ? uv_default_loop(): uv_loop_new(); + exitHandler = 0; } Isolate::~Isolate() { diff --git a/src/node.h b/src/node.h index f61d3ba329e..bf013d93053 100644 --- a/src/node.h +++ b/src/node.h @@ -96,7 +96,7 @@ #ifdef NODE_LIBRARY # define EXIT(X) node::Isolate *i = node::Isolate::GetCurrent(); if(!i->exit_status) i->exit_status = (X) -# define RETURN_ON_EXIT(X) if(exit_status) return X +# define RETURN_ON_EXIT(X) if(exit_status) { if(exitHandler) exitHandler(); return X; } # define BREAK_AND_EXIT(X) ev_break(node::Isolate::GetCurrent()->Loop()->ev, EVBREAK_ALL); EXIT(X) //FIXME: implement generically for uv #else # define EXIT(X) exit((X)) @@ -146,6 +146,7 @@ class Isolate { ext_statics statics_; int exit_status; int term_signal; + void (*exitHandler)(); Isolate(); ~Isolate();