Bug 1381717 - [Fennec][HLS] Fix code defects found by Coverity in GeckoHlsPlayer.java. krr. r?kikuo
MozReview-Commit-ID: 8bFav7kqUbQ
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
@@ -43,17 +43,17 @@ import org.mozilla.gecko.annotation.Refl
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
@ReflectionTarget
public class GeckoHlsPlayer implements BaseHlsPlayer, ExoPlayer.EventListener {
private static final String LOGTAG = "GeckoHlsPlayer";
private static final DefaultBandwidthMeter BANDWIDTH_METER = new DefaultBandwidthMeter();
private static final int MAX_TIMELINE_ITEM_LINES = 3;
- private static boolean DEBUG = AppConstants.NIGHTLY_BUILD || AppConstants.DEBUG_BUILD;
+ private static final boolean DEBUG = AppConstants.NIGHTLY_BUILD || AppConstants.DEBUG_BUILD;
private static AtomicInteger sPlayerId = new AtomicInteger(0);
/*
* Because we treat GeckoHlsPlayer as a source data provider.
* It will be created and initialized with a URL by HLSResource in
* Gecko media pipleine (in cpp). Once HLSDemuxer is created later, we
* need to bridge this HLSResource to the created demuxer. And they share
* the same GeckoHlsPlayer.
@@ -589,17 +589,17 @@ public class GeckoHlsPlayer implements B
public boolean isLiveStream() {
return !mIsTimelineStatic;
}
// =======================================================================
// API for GeckoHLSDemuxerWrapper
// =======================================================================
// Called on HLSDemuxer's TaskQueue
@Override
- public ConcurrentLinkedQueue<GeckoHLSSample> getSamples(TrackType trackType,
+ public synchronized ConcurrentLinkedQueue<GeckoHLSSample> getSamples(TrackType trackType,
int number) {
if (trackType == TrackType.VIDEO) {
return mVRenderer != null ? mVRenderer.getQueuedSamples(number) :
new ConcurrentLinkedQueue<GeckoHLSSample>();
} else if (trackType == TrackType.AUDIO) {
return mARenderer != null ? mARenderer.getQueuedSamples(number) :
new ConcurrentLinkedQueue<GeckoHLSSample>();
} else {
@@ -716,30 +716,30 @@ public class GeckoHlsPlayer implements B
long nextKeyFrameTime = mVRenderer != null
? mVRenderer.getNextKeyFrameTime()
: Long.MAX_VALUE;
return nextKeyFrameTime;
}
// Called on Gecko's main thread.
@Override
- public void suspend() {
+ public synchronized void suspend() {
if (mSuspended) {
return;
}
if (DEBUG) { Log.d(LOGTAG, "suspend player id : " + mPlayerId); }
mSuspended = true;
if (mPlayer != null) {
mPlayer.setPlayWhenReady(false);
}
}
// Called on Gecko's main thread.
@Override
- public void resume() {
+ public synchronized void resume() {
if (!mSuspended) {
return;
}
if (DEBUG) { Log.d(LOGTAG, "resume player id : " + mPlayerId); }
mSuspended = false;
if (mPlayer != null) {
mPlayer.setPlayWhenReady(true);
}