Make sure watcher.set() isn't being called when active

This commit is contained in:
Ryan Dahl 2010-10-30 12:52:53 -07:00
Родитель 016fdab43e
Коммит 9c2969253b
2 изменённых файлов: 7 добавлений и 8 удалений

Просмотреть файл

@ -14,9 +14,8 @@ timer.callback = function () {
for (var i = 0, l = sockets.length; i < l; i++) {
var socket = sockets[i];
var s = parseInt(socket, 10);
channel.processFD( watchers[socket].read ? s : dns.SOCKET_BAD
, watchers[socket].write ? s : dns.SOCKET_BAD
);
channel.processFD(watchers[socket].read ? s : dns.SOCKET_BAD,
watchers[socket].write ? s : dns.SOCKET_BAD);
}
updateTimer();
};
@ -46,20 +45,19 @@ var channel = new dns.Channel({SOCK_STATE_CB: function (socket, read, write) {
};
watcher.callback = function(read, write) {
channel.processFD( read ? socket : dns.SOCKET_BAD
, write ? socket : dns.SOCKET_BAD
);
channel.processFD(read ? socket : dns.SOCKET_BAD,
write ? socket : dns.SOCKET_BAD);
updateTimer();
};
};
watcher.set(socket, read == 1, write == 1);
watcher.stop();
if (!(read || write)) {
watcher.stop();
delete activeWatchers[socket];
return;
} else {
watcher.set(socket, read == 1, write == 1);
watcher.start();
activeWatchers[socket] = watcher;
}

Просмотреть файл

@ -139,6 +139,7 @@ Handle<Value> IOWatcher::Set(const Arguments& args) {
if (args[2]->IsTrue()) events |= EV_WRITE;
assert(!io->watcher_.active);
ev_io_set(&io->watcher_, fd, events);
return Undefined();