Skip to content

Commit 069dab3

Browse files
authored
Merge pull request #10 from rdkcentral/fix/double_dispose
Fix/double dispose
2 parents d825e57 + 7d1c7dd commit 069dab3

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

dist/thunderJS.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

module/thunderJS.js

+1
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ function listener(plugin, event, callback, errorCallback) {
215215
return {
216216
dispose() {
217217
const listener_id = makeListenerId(plugin, event);
218+
if (listeners[listener_id] === undefined) return
218219
listeners[listener_id].splice(index, 1);
219220
if (listeners[listener_id].length === 0) {
220221
unregister.call(thunder, plugin, event, errorCallback);

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"Metrological, Wouter <[email protected]>"
55
],
66
"name": "ThunderJS",
7-
"version": "1.2.3",
7+
"version": "1.2.4",
88
"license": "apache",
99
"browser": "dist/thunderJS.js",
1010
"main": "src/thunderJS.js",

src/listener.js

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ export default function(plugin, event, callback, errorCallback) {
2828
return {
2929
dispose() {
3030
const listener_id = makeListenerId(plugin, event)
31+
//early return if the listener is already deleted and someone is calling dispose twice
32+
if (listeners[listener_id] === undefined) return
33+
3134
listeners[listener_id].splice(index, 1)
3235

3336
if (listeners[listener_id].length === 0) {

tests/thunderJS.notifications.spec.js

+19
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,25 @@ test('thunderJS - notifications - error on invalid event', assert => {
224224
}, 250)
225225
})
226226

227+
// should execute callback each time when notification listener is called
228+
test('thunderJS - notifications - call dispose twice', assert => {
229+
resetStubsAndSpies()
230+
let thunderJS = ThunderJS(options)
231+
232+
const TestListener = thunderJS.FooPlugin.on(
233+
'bar',
234+
() => {},
235+
() => {}
236+
)
237+
238+
assert.doesNotThrow(TestListener.dispose, 'First dispose should work')
239+
assert.doesNotThrow(
240+
TestListener.dispose,
241+
'Second dispose should not an error, even though it no longer exists'
242+
)
243+
assert.end()
244+
})
245+
227246
test('Teardown - thunderJS - calls', assert => {
228247
makeBodySpy.restore()
229248
apiRequestSpy.restore()

0 commit comments

Comments
 (0)