padolsey / operative

:dog2: Seamlessly create Web Workers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG]memory leak after action finished

vinstics opened this issue · comments

callback or defferred should be set to null after result returned.

here's my hack, so is the iframe:

switch (data.cmd) {
  case 'console':
    window.console && window.console[data.method].apply(window.console, data.args);
    break;
  case 'deferred_reject_error':
    this.deferreds[data.token].reject(data.error);
    this.deferreds[data.token] = null; // avoid memory leak

    break;
  case 'result':

    var callback = this.callbacks[data.token];
    var deferred = this.deferreds[data.token];

    var deferredAction = data.result && data.result.isDeferred && data.result.action;

    if (deferred && deferredAction) {
      deferred[deferredAction](data.result.args[0]);
      this.deferreds[data.token] = null; // avoid memory leak
    } else if (callback) {
      callback.apply(this, data.result.args);
      this.callbacks[data.token] = null; // avoid memory leak
    } else if (deferred) {
      // Resolve promise even if result was given
      // via callback within the worker:
      deferred.fulfil(data.result.args[0]);
      this.deferreds[data.token] = null; // avoid memory leak
    }

    break;
}