Skip to content

SERXIONE-8617 Fix crash in AAMPGstPlayer::Pause when receiving EAS alert#1452

Draft
jfagunde wants to merge 3 commits into
dev_sprint_25_2from
feature/SERXIONE-8617
Draft

SERXIONE-8617 Fix crash in AAMPGstPlayer::Pause when receiving EAS alert#1452
jfagunde wants to merge 3 commits into
dev_sprint_25_2from
feature/SERXIONE-8617

Conversation

@jfagunde
Copy link
Copy Markdown
Contributor

Reason for Change: Fix crash in AAMPGstPlayer::Pause

Summary of Changes:

  • Add protection against null playerInstance to AAMPGstPlayer::Pause
  • Lock sync mutex in AAMPGstPlayer::Stop
  • Test changes in L1 tests
  • Add mocks for SyncBegin and SyncEnd

Test Procedure: Send EAS alerts and confirm there is no crash

Priority: P0

Risks: Low

jfagunde added 2 commits May 15, 2026 10:12
Reason for Change: Fix crash in AAMPGstPlayer::Pause

Summary of Changes:
- Add protection against null playerInstance to AAMPGstPlayer::Pause
- Lock sync mutex in AAMPGstPlayer::Stop
- Test changes in L1 tests
- Add mocks for SyncBegin and SyncEnd

Test Procedure: Send EAS alerts and confirm there is no crash

Priority: P0

Risks: Low
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses an AAMPGstPlayer crash path around pause/stop handling during EAS alert scenarios by adding synchronization around stop and null handling around pause, plus related L1 test support.

Changes:

  • Adds SyncBegin/SyncEnd calls around AAMPGstPlayer::Stop.
  • Guards AAMPGstPlayer::Pause against a null playerInstance.
  • Adds AAMPGstPlayer tests and mock/fake support for sync calls.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
aampgstplayer.cpp Adds stop synchronization and pause null guard.
test/utests/tests/AampGstPlayer/FunctionalTests.cpp Adds pause null-player and stop-with-pipeline tests.
test/utests/mocks/MockPrivateInstanceAAMP.h Adds mock methods for sync calls.
test/utests/fakes/FakePrivateInstanceAAMP.cpp Forwards fake sync calls to the mock.
test/utests/tests/StreamAbstractionAAMP_MPD/subtitleTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/StreamSelectionTest.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/LinearFOGTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/FunctionalTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/FetcherLoopTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/AudioTrackSwitchTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/AudioTrackSelectionTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/StreamAbstractionAAMP_MPD/AudioOnlyTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/FragmentCollectorAdTests/AdSelectionTests.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/fragmentcollector_mpd/fragmentcollector_mpd1.cpp Changes PrivateInstanceAAMP mock strictness.
test/utests/tests/fragmentcollector_mpd/FindTimedMetadataTests.cpp Changes PrivateInstanceAAMP mock strictness.

g_mockAampConfig = new NiceMock<MockAampConfig>();
mPrivateInstanceAAMP->mIsDefaultOffset = true;
g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
g_mockAampConfig = new NiceMock<MockAampConfig>();
mPrivateInstanceAAMP->mIsDefaultOffset = true;
g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
mPrivateInstanceAAMP->mIsDefaultOffset = true;

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
mPrivateInstanceAAMP->mIsDefaultOffset = true;

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
g_mockAampGstPlayer = new MockAAMPGstPlayer(mPrivateInstanceAAMP);
mPrivateInstanceAAMP->mIsDefaultOffset = true;
g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
mPrivateInstanceAAMP->mIsDefaultOffset = true;

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
g_mockAampGstPlayer = new MockAAMPGstPlayer(mPrivateInstanceAAMP);

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
mPrivateInstanceAAMP->mIsDefaultOffset = true;

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
mPrivateInstanceAAMP = new PrivateInstanceAAMP(gpGlobalConfig);

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
mPrivateInstanceAAMP = new PrivateInstanceAAMP(gpGlobalConfig);

g_mockPrivateInstanceAAMP = new StrictMock<MockPrivateInstanceAAMP>();
g_mockPrivateInstanceAAMP = new NiceMock<MockPrivateInstanceAAMP>();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants