Move IOWatcher and Timer to process.binding
authorRyan Dahl <ry@tinyclouds.org>
Fri, 17 Sep 2010 07:15:44 +0000 (00:15 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Fri, 17 Sep 2010 07:15:54 +0000 (00:15 -0700)
lib/dgram.js
lib/dns.js
lib/net.js
src/node.cc
src/node.js

index 7325b67bb177a2b767cc5328fd43af0c79e88841..d374d1d1313dec0b9eac881cf2e7077a5a1cd92d 100644 (file)
@@ -4,7 +4,7 @@ var events = require("events");
 var dns = require('dns');
 
 var Buffer = require('buffer').Buffer;
-var IOWatcher    = process.IOWatcher;
+var IOWatcher    = process.binding('io_watcher').IOWatcher;
 var binding      = process.binding('net');
 var socket       = binding.socket;
 var recvfrom     = binding.recvfrom;
index 8f9ce768be7507f80d12baf2279d0bfa9ebc1224..2f033bb0a646018b5d6e0b0f67dadc4981040d13 100644 (file)
@@ -1,12 +1,13 @@
 var dns = process.binding('cares');
 var net = process.binding('net');
+var IOWatcher = process.binding('io_watcher').IOWatcher;
 
 
 var watchers = {};
 var activeWatchers = {};
+var Timer = process.binding('timer').Timer;
 
-
-var timer = new process.Timer();
+var timer = new Timer();
 
 timer.callback = function () {
   var sockets = Object.keys(activeWatchers);
@@ -44,7 +45,7 @@ var channel = new dns.Channel({SOCK_STATE_CB: function (socket, read, write) {
   if (socket in watchers) {
     watcher = watchers[socket].watcher;
   } else {
-    watcher = new process.IOWatcher();
+    watcher = new IOWatcher();
     watchers[socket] = { read: read
                        , write: write
                        , watcher: watcher
index be862dcec92ba7de8435f1c2fc2543afe5ca318e..ced5ca771cc835aff6a1484a75e3ffaa78a12264 100644 (file)
@@ -23,7 +23,8 @@ var binding = process.binding('net');
 var Buffer = require('buffer').Buffer;
 var FreeList = require('freelist').FreeList;
 
-var IOWatcher   = process.IOWatcher;
+var IOWatcher   = process.binding('io_watcher').IOWatcher;
+var Timer       = process.binding('timer').Timer;
 var assert      = process.assert;
 
 var socket      = binding.socket;
@@ -125,7 +126,7 @@ var timeout = new (function () {
     if (lists[msecs]) {
       list = lists[msecs];
     } else {
-      list = new process.Timer();
+      list = new Timer();
       list._idleNext = list;
       list._idlePrev = list;
 
index 1bbd03e977def8df04ffeb6932ba93c7375b4041..8aa33cb0f525c9b9907233e65b367f5c0d0023be 100644 (file)
@@ -1464,6 +1464,16 @@ static Handle<Value> Binding(const Arguments& args) {
     DefineConstants(exports);
     binding_cache->Set(module, exports);
 
+  } else if (!strcmp(*module_v, "io_watcher")) {
+    exports = Object::New();
+    IOWatcher::Initialize(exports);
+    binding_cache->Set(module, exports);
+
+  } else if (!strcmp(*module_v, "timer")) {
+    exports = Object::New();
+    Timer::Initialize(exports);
+    binding_cache->Set(module, exports);
+
   } else if (!strcmp(*module_v, "natives")) {
     exports = Object::New();
     // Explicitly define native sources.
@@ -1620,14 +1630,6 @@ static void Load(int argc, char *argv[]) {
   process->Set(String::NewSymbol("EventEmitter"),
                EventEmitter::constructor_template->GetFunction());
 
-
-  // Initialize the C++ modules..................filename of module
-  IOWatcher::Initialize(process);              // io_watcher.cc
-  // Not in use at the moment.
-  //IdleWatcher::Initialize(process);            // idle_watcher.cc
-  Timer::Initialize(process);                  // timer.cc
-  // coverity[stack_use_callee]
-
   // Compile, execute the src/node.js file. (Which was included as static C
   // string in node_natives.h. 'natve_node' is the string containing that
   // source code.)
index d504e10bec126ae259b9e2b2dc10843c5033f52a..cd5696587a0f9b0f77654d619cde974f223b9e06 100644 (file)
@@ -158,28 +158,34 @@ function addTimerListener (callback) {
   }
 }
 
+var Timer; // lazy load
+
 global.setTimeout = function (callback, after) {
-  var timer = new process.Timer();
+  if (!Timer) Timer = process.binding("timer").Timer;
+  var timer = new Timer();
   addTimerListener.apply(timer, arguments);
   timer.start(after, 0);
   return timer;
 };
 
 global.setInterval = function (callback, repeat) {
-  var timer = new process.Timer();
+  if (!Timer) Timer = process.binding("timer").Timer;
+  var timer = new Timer();
   addTimerListener.apply(timer, arguments);
   timer.start(repeat, repeat ? repeat : 1);
   return timer;
 };
 
 global.clearTimeout = function (timer) {
-  if (timer instanceof process.Timer) {
+  if (!Timer) Timer = process.binding("timer").Timer;
+  if (timer instanceof Timer) {
     timer.stop();
   }
 };
 
 global.clearInterval = global.clearTimeout;
 
+
 var stdout;
 process.__defineGetter__('stdout', function () {
   if (stdout) return stdout;