Bug 1384578 - Adjust the calling sequence to avoid app crash by race condition. draft
authorJames Cheng <jacheng@mozilla.com>
Mon, 31 Jul 2017 11:23:29 +0800
changeset 618254 5a75028e66f46127b0c402f1bb99806a63554a45
parent 618186 6d1b50a370b4adffbb1ee73b9f51707c90d6a2b1
child 640006 8f7559fb034e7401c32476937fb29f668c17662b
push id71266
push userbmo:jacheng@mozilla.com
push dateMon, 31 Jul 2017 03:23:47 +0000
bugs1384578
milestone56.0a1
Bug 1384578 - Adjust the calling sequence to avoid app crash by race condition. MozReview-Commit-ID: JKtfNYTTCjp
dom/media/hls/HLSDemuxer.cpp
dom/media/hls/HLSResource.cpp
--- a/dom/media/hls/HLSDemuxer.cpp
+++ b/dom/media/hls/HLSDemuxer.cpp
@@ -248,24 +248,24 @@ HLSDemuxer::OnTaskQueue() const
 {
   return mTaskQueue->IsCurrentThreadIn();
 }
 
 HLSDemuxer::~HLSDemuxer()
 {
   HLS_DEBUG("HLSDemuxer", "~HLSDemuxer()");
   mCallbackSupport->Detach();
-  if (mJavaCallbacks) {
-    HLSDemuxerCallbacksSupport::DisposeNative(mJavaCallbacks);
-    mJavaCallbacks = nullptr;
-  }
   if (mHLSDemuxerWrapper) {
     mHLSDemuxerWrapper->Destroy();
     mHLSDemuxerWrapper = nullptr;
   }
+  if (mJavaCallbacks) {
+      HLSDemuxerCallbacksSupport::DisposeNative(mJavaCallbacks);
+      mJavaCallbacks = nullptr;
+  }
   mInitPromise.RejectIfExists(NS_ERROR_DOM_MEDIA_CANCELED, __func__);
 }
 
 HLSTrackDemuxer::HLSTrackDemuxer(HLSDemuxer* aParent,
                                  TrackInfo::TrackType aType,
                                  UniquePtr<TrackInfo> aTrackInfo)
   : mParent(aParent)
   , mType(aType)
--- a/dom/media/hls/HLSResource.cpp
+++ b/dom/media/hls/HLSResource.cpp
@@ -95,19 +95,19 @@ void HLSResource::Resume()
 
 HLSResource::~HLSResource()
 {
   HLS_DEBUG("HLSResource", "~HLSResource()");
   if (mCallbackSupport) {
     mCallbackSupport->Detach();
     mCallbackSupport = nullptr;
   }
-  if (mJavaCallbacks) {
-    HLSResourceCallbacksSupport::DisposeNative(mJavaCallbacks);
-    mJavaCallbacks = nullptr;
-  }
   if (mHLSResourceWrapper) {
     mHLSResourceWrapper->Destroy();
     mHLSResourceWrapper = nullptr;
   }
+  if (mJavaCallbacks) {
+      HLSResourceCallbacksSupport::DisposeNative(mJavaCallbacks);
+      mJavaCallbacks = nullptr;
+  }
 }
 
 } // namespace mozilla