Skip to content

Commit 429b953

Browse files
authored
Merge pull request #320 from Spongman/fix-callback-crash
prevent crashes during completion of callbacks on disposed SoundFiles
2 parents 9f84ca5 + 469c799 commit 429b953

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/soundfile.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,11 @@ define(function (require) {
221221
request.onload = function() {
222222
if (request.status === 200) {
223223
// on sucess loading file:
224+
if (!self.panner) return;
224225
ac.decodeAudioData(request.response,
225226
// success decoding buffer:
226227
function(buff) {
228+
if (!self.panner) return;
227229
self.buffer = buff;
228230
self.panner.inputChannels(buff.numberOfChannels);
229231
if (callback) {
@@ -232,6 +234,7 @@ define(function (require) {
232234
},
233235
// error decoding buffer. "e" is undefined in Chrome 11/22/2015
234236
function() {
237+
if (!self.panner) return;
235238
var err = new CustomError('decodeAudioData', errorTrace, self.url);
236239
var msg = 'AudioContext error at decodeAudioData for ' + self.url;
237240
if (errorCallback) {
@@ -245,6 +248,7 @@ define(function (require) {
245248
}
246249
// if request status != 200, it failed
247250
else {
251+
if (!self.panner) return;
248252
var err = new CustomError('loadSound', errorTrace, self.url);
249253
var msg = 'Unable to load ' + self.url + '. The request status was: ' +
250254
request.status + ' (' + request.statusText + ')';
@@ -276,7 +280,9 @@ define(function (require) {
276280
else if (this.file !== undefined) {
277281
var reader = new FileReader();
278282
reader.onload = function() {
283+
if (!self.panner) return;
279284
ac.decodeAudioData(reader.result, function(buff) {
285+
if (!self.panner) return;
280286
self.buffer = buff;
281287
self.panner.inputChannels(buff.numberOfChannels);
282288
if (callback) {
@@ -285,6 +291,7 @@ define(function (require) {
285291
});
286292
};
287293
reader.onerror = function(e) {
294+
if (!self.panner) return;
288295
if (onerror) {
289296
onerror(e);
290297
}
@@ -1301,6 +1308,7 @@ define(function (require) {
13011308

13021309
// act on the result
13031310
offlineContext.oncomplete = function(e) {
1311+
if (!self.panner) return;
13041312
var filteredBuffer = e.renderedBuffer;
13051313
var bufferData = filteredBuffer.getChannelData(0);
13061314

@@ -1652,9 +1660,10 @@ define(function (require) {
16521660
* <div><code>
16531661
* var inp, button, mySound;
16541662
* var fileName = 'cool';
1655-
* function setup() {
1663+
* function preload() {
16561664
* mySound = loadSound('assets/doorbell.mp3');
1657-
*
1665+
* }
1666+
* function setup() {
16581667
* btn = createButton('click to save file');
16591668
* btn.position(0, 0);
16601669
* btn.mouseClicked(handleMouseClick);

0 commit comments

Comments
 (0)