#include "queue.h"
#include "v8.h"
#include "uv.h"
+#include "node_vars.h"
#ifdef NDEBUG
# define NODE_ISOLATE_CHECK(ptr) ((void) (ptr))
/* Shutdown the isolate. Call this method at thread death. */
void Dispose();
+ struct globals* Globals();
+
private:
Isolate(uv_loop_t* loop);
SLIST_HEAD(AtExitCallbacks, AtExitCallbackInfo) at_exit_callbacks_;
v8::Isolate* isolate_;
uv_loop_t* loop_;
+
+ // Global variables for this isolate.
+ struct globals globals_;
};
} // namespace node
#include <node_vars.h>
+#include <node_isolate.h>
#if HAVE_OPENSSL
# include <node_crypto.h>
#endif
// For now we just statically initialize the globals structure. Later there
// will be one struct globals for each isolate.
-static struct globals g_struct;
-static struct globals* g_ptr;
-
-
-static void globals_init(struct globals* g) {
+void globals_init(struct globals* g) {
memset(g, 0, sizeof(struct globals));
g->debug_port = 5858;
}
+#if HAVE_ISOLATES
+struct globals* globals_get() {
+ node::Isolate* isolate = node::Isolate::GetCurrent();
+ return isolate->Globals();
+}
+#else
+static struct globals g_struct;
+static struct globals* g_ptr;
+
struct globals* globals_get() {
if (!g_ptr) {
g_ptr = &g_struct;
}
return g_ptr;
}
+#endif // HAVE_ISOLATES
} // namespace node
::ares_channel ares_channel;
};
+// Initialize globals struct.
+void globals_init(struct globals*);
+
+// Get the globals struct for the current Isolate. The returned pointer is
+// already initialized.
struct globals* globals_get();
} // namespace node