Bug 1381717 - [Fennec][HLS] Fix code defects found by Coverity in GeckoHlsPlayer.java. krr. r?kikuo draft
authorJames Cheng <jacheng@mozilla.com>
Tue, 18 Jul 2017 10:55:35 +0800
changeset 610281 1ba74c91d06368c902ac235e2deb3d1d974022cb
parent 610234 5e73b9798464c3f7106f0161dc9a49b234f42f9c
child 637804 51d737945ad3512866bbb9312ac361a6c82b288b
push id68829
push userbmo:jacheng@mozilla.com
push dateTue, 18 Jul 2017 02:55:52 +0000
reviewerskikuo
bugs1381717
milestone56.0a1
Bug 1381717 - [Fennec][HLS] Fix code defects found by Coverity in GeckoHlsPlayer.java. krr. r?kikuo MozReview-Commit-ID: 8bFav7kqUbQ
mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
--- 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);
         }