From 77c2da10fd437c1b68b28b5b25e165140e198b31 Mon Sep 17 00:00:00 2001 From: Petka Antonov Date: Fri, 27 Mar 2015 20:43:25 +0200 Subject: [PATCH] timers: make Timer.close idempotent fixes #1287 PR-URL: https://github.com/iojs/io.js/pull/1288 Reviewed-By: Ben Noordhuis --- src/env.h | 2 +- src/handle_wrap.cc | 4 ++-- test/parallel/test-timer-close.js | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 test/parallel/test-timer-close.js diff --git a/src/env.h b/src/env.h index 027c79dfae8510..9099b3b931717a 100644 --- a/src/env.h +++ b/src/env.h @@ -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") \ diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index 70e7cbb12aca06..341ecfdef5967b 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -52,7 +52,7 @@ void HandleWrap::Close(const FunctionCallbackInfo& 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 = wrap->object(); if (wrap->flags_ & kCloseCallback) { - wrap->MakeCallback(env->close_string(), 0, nullptr); + wrap->MakeCallback(env->onclose_string(), 0, nullptr); } object->SetAlignedPointerInInternalField(0, nullptr); diff --git a/test/parallel/test-timer-close.js b/test/parallel/test-timer-close.js new file mode 100644 index 00000000000000..b374fe162cfed1 --- /dev/null +++ b/test/parallel/test-timer-close.js @@ -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); +});