web: Avoid bug in generational-arena (fix #1315)

An issue with Arena::clear allowed stale sound instance indices
to be remain valid, causing certain sounds to be removed when they
shouldn't (#1315). Workaround this issue by forcing Arena to bump
the generational index.
This commit is contained in:
Mike Welsh 2020-10-25 19:12:28 -07:00
parent 37ead31b2a
commit 796805c31b
1 changed files with 7 additions and 0 deletions

View File

@ -786,6 +786,13 @@ impl AudioBackend for WebAudioBackend {
}
// TODO: Have to handle Decoder nodes. (These may just go into a different backend.)
});
// This is a workaround for a bug in generational-arena:
// Arena::clear does not properly bump the generational index, allowing for stale references
// to continue to work (this caused #1315). Arena::remove will force a generation bump.
// See https://github.com/fitzgen/generational-arena/issues/30
if let Some((i, _)) = instances.iter().next() {
instances.remove(i);
}
instances.clear();
})
}