From 449c03cb35886279f03b6ef113a076f78df8caf9 Mon Sep 17 00:00:00 2001 From: aki Date: Tue, 16 Jun 2015 18:05:45 +0900 Subject: [PATCH] Fix destroy listeners --- spec/display-buffer-spec.coffee | 5 +++++ src/display-buffer.coffee | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spec/display-buffer-spec.coffee b/spec/display-buffer-spec.coffee index 140ca2f9e..7d82ebcf5 100644 --- a/spec/display-buffer-spec.coffee +++ b/spec/display-buffer-spec.coffee @@ -1229,6 +1229,11 @@ describe "DisplayBuffer", -> decoration.destroy() expect(displayBuffer.decorationForId(decoration.id)).not.toBeDefined() + it "does not leak disposables", -> + disposablesSize = displayBuffer.disposables.disposables.size + decoration.destroy() + expect(displayBuffer.disposables.disposables.size).toBe(disposablesSize - 1) + describe "when a decoration is updated via Decoration::update()", -> it "emits an 'updated' event containing the new and old params", -> decoration.onDidChangeProperties updatedSpy = jasmine.createSpy() diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 2519fa6d6..179795db5 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -974,7 +974,10 @@ class DisplayBuffer extends Model decorateMarker: (marker, decorationParams) -> marker = @getMarker(marker.id) decoration = new Decoration(marker, this, decorationParams) - @disposables.add decoration.onDidDestroy => @removeDecoration(decoration) + decorationDestroyedDisposable = decoration.onDidDestroy => + @removeDecoration(decoration) + @disposables.remove(decorationDestroyedDisposable) + @disposables.add(decorationDestroyedDisposable) @decorationsByMarkerId[marker.id] ?= [] @decorationsByMarkerId[marker.id].push(decoration) @overlayDecorationsById[decoration.id] = decoration if decoration.isType('overlay')