[FIX] memory leak in event dispatcher
bzr revid: nicolas.vanhoren@openerp.com-20121018095132-3ew3rbkjfwzgp5r1
This commit is contained in:
@@ -291,6 +291,17 @@ var Events = instance.web.Class.extend({
|
||||
return this;
|
||||
},
|
||||
|
||||
callbackList: function() {
|
||||
var lst = [];
|
||||
_.each(this._callbacks || {}, function(el, eventName) {
|
||||
var node = el;
|
||||
while ((node = node.next) && node.next) {
|
||||
lst.push([eventName, node.callback, node.context]);
|
||||
}
|
||||
});
|
||||
return lst;
|
||||
},
|
||||
|
||||
trigger : function(events) {
|
||||
var event, node, calls, tail, args, all, rest;
|
||||
if (!(calls = this._callbacks))
|
||||
@@ -369,9 +380,9 @@ instance.web.EventDispatcherMixin = _.extend({}, instance.web.ParentedMixin, {
|
||||
event.source.__edispatcherEvents.off(event.name, event.func, self);
|
||||
});
|
||||
this.__edispatcherRegisteredEvents = [];
|
||||
if(!this.__edispatcherEvents) {
|
||||
debugger;
|
||||
}
|
||||
_.each(this.__edispatcherEvents.callbackList(), function(cal) {
|
||||
this.off(cal[0], cal[2], cal[1]);
|
||||
}, this);
|
||||
this.__edispatcherEvents.off();
|
||||
instance.web.ParentedMixin.destroy.call(this);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user