From 01e3ccd3e24e06181e06be2a692c458fa66f01c7 Mon Sep 17 00:00:00 2001 From: xicilion Date: Wed, 22 Apr 2020 18:52:43 +0800 Subject: [PATCH] events, bugfix: crash when off function on new Emitter. --- fibjs/include/EventEmitter.h | 10 ++++++---- test/trigger_test.js | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/fibjs/include/EventEmitter.h b/fibjs/include/EventEmitter.h index a159ee9921..12a6ae1ad6 100644 --- a/fibjs/include/EventEmitter.h +++ b/fibjs/include/EventEmitter.h @@ -302,12 +302,14 @@ class JSTrigger { { v8::Local esa = GetHiddenList(ev); - removeFunction(esa, func, ev); + if (!esa.IsEmpty()) { + removeFunction(esa, func, ev); - int32_t len = esa->Length(); + int32_t len = esa->Length(); - if (len == 0) - DeletePrivate(ev); + if (len == 0) + DeletePrivate(ev); + } retVal = o; return 0; diff --git a/test/trigger_test.js b/test/trigger_test.js index 706f0a7694..b99aea63af 100644 --- a/test/trigger_test.js +++ b/test/trigger_test.js @@ -397,6 +397,11 @@ describe("Trigger/EventEmitter", () => { evevt_test("events.EventEmitter.call", new MyEmitter2()); + it('bugfix: crash when off function on new Emitter', () => { + var ev = new events.EventEmitter(); + ev.off('a', () => {}); + }) + describe("defaultMaxListeners", () => { it('getter', () => { assert.equal(events.defaultMaxListeners, 10);