Skip to content

Commit 0364151

Browse files
authored
prevent player hold invalid AudioCache* pointer (#19240)
* prevent player hold invalid AudioCache* pointer * do same on win32
1 parent 6d5a4ea commit 0364151

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

cocos/audio/apple/AudioEngine-inl.mm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,7 @@ AL_API ALvoid AL_APIENTRY alGenBuffers(ALsizei n, ALuint *bids)
677677
if (player->_finishCallbak) {
678678
auto& audioInfo = AudioEngine::_audioIDInfoMap[audioID];
679679
filePath = *audioInfo.filePath;
680+
player->setCache(nullptr); // it's safe for player didn't free audio cache
680681
}
681682

682683
AudioEngine::remove(audioID);
@@ -710,6 +711,11 @@ AL_API ALvoid AL_APIENTRY alGenBuffers(ALsizei n, ALuint *bids)
710711
void AudioEngineImpl::uncacheAll()
711712
{
712713
_audioCaches.clear();
714+
for(auto&& player : _audioPlayers)
715+
{
716+
// prevent player hold invalid AudioCache* pointer, since all audio caches purged
717+
player.second->setCache(nullptr);
718+
}
713719
}
714720

715721
#endif

cocos/audio/win32/AudioEngine-win32.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ void AudioEngineImpl::update(float dt)
482482
if (player->_finishCallbak) {
483483
auto& audioInfo = AudioEngine::_audioIDInfoMap[audioID];
484484
filePath = *audioInfo.filePath;
485+
player->setCache(nullptr); // it's safe for player didn't free audio cache
485486
}
486487

487488
AudioEngine::remove(audioID);
@@ -515,6 +516,11 @@ void AudioEngineImpl::uncache(const std::string &filePath)
515516
void AudioEngineImpl::uncacheAll()
516517
{
517518
_audioCaches.clear();
519+
for(auto&& player : _audioPlayers)
520+
{
521+
// prevent player hold invalid AudioCache* pointer, since all audio caches purged
522+
player.second->setCache(nullptr);
523+
}
518524
}
519525

520526
#endif

0 commit comments

Comments
 (0)