timers: make Timer.close idempotent
fixes #1287 PR-URL: https://github.com/iojs/io.js/pull/1288 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
dbccf8d3ed
commit
77c2da10fd
@ -55,7 +55,7 @@ namespace node {
|
||||
V(bytes_parsed_string, "bytesParsed") \
|
||||
V(callback_string, "callback") \
|
||||
V(change_string, "change") \
|
||||
V(close_string, "close") \
|
||||
V(onclose_string, "_onclose") \
|
||||
V(code_string, "code") \
|
||||
V(compare_string, "compare") \
|
||||
V(ctime_string, "ctime") \
|
||||
|
@ -52,7 +52,7 @@ void HandleWrap::Close(const FunctionCallbackInfo<Value>& args) {
|
||||
wrap->handle__ = nullptr;
|
||||
|
||||
if (args[0]->IsFunction()) {
|
||||
wrap->object()->Set(env->close_string(), args[0]);
|
||||
wrap->object()->Set(env->onclose_string(), args[0]);
|
||||
wrap->flags_ |= kCloseCallback;
|
||||
}
|
||||
}
|
||||
@ -94,7 +94,7 @@ void HandleWrap::OnClose(uv_handle_t* handle) {
|
||||
Local<Object> object = wrap->object();
|
||||
|
||||
if (wrap->flags_ & kCloseCallback) {
|
||||
wrap->MakeCallback(env->close_string(), 0, nullptr);
|
||||
wrap->MakeCallback(env->onclose_string(), 0, nullptr);
|
||||
}
|
||||
|
||||
object->SetAlignedPointerInInternalField(0, nullptr);
|
||||
|
14
test/parallel/test-timer-close.js
Normal file
14
test/parallel/test-timer-close.js
Normal file
@ -0,0 +1,14 @@
|
||||
var assert = require('assert');
|
||||
|
||||
var t = new (process.binding('timer_wrap').Timer);
|
||||
var called = 0;
|
||||
function onclose() {
|
||||
called++;
|
||||
}
|
||||
|
||||
t.close(onclose);
|
||||
t.close(onclose);
|
||||
|
||||
process.on('exit', function() {
|
||||
assert.equal(1, called);
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user