richard pushed to branch base-browser-102.12.0esr-12.0-1 at The Tor Project / Applications / Tor Browser
Commits:
- 
0c25c6c7
by John Lin at 2023-06-06T16:35:31+00:00
2 changed files:
Changes:
| ... | ... | @@ -494,7 +494,10 @@ void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleInput( | 
| 494 | 494 |  template <typename ConfigType>
 | 
| 495 | 495 |  void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleOutput(
 | 
| 496 | 496 |      java::Sample::Param aSample, java::SampleBuffer::Param aBuffer) {
 | 
| 497 | -  mEncoder->ProcessOutput(std::move(aSample), std::move(aBuffer));
 | |
| 497 | +  MutexAutoLock lock(mMutex);
 | |
| 498 | +  if (mEncoder) {
 | |
| 499 | +    mEncoder->ProcessOutput(std::move(aSample), std::move(aBuffer));
 | |
| 500 | +  }
 | |
| 498 | 501 |  }
 | 
| 499 | 502 | |
| 500 | 503 |  template <typename ConfigType>
 | 
| ... | ... | @@ -504,7 +507,10 @@ void AndroidDataEncoder<ConfigType>::CallbacksSupport:: | 
| 504 | 507 |  template <typename ConfigType>
 | 
| 505 | 508 |  void AndroidDataEncoder<ConfigType>::CallbacksSupport::HandleError(
 | 
| 506 | 509 |      const MediaResult& aError) {
 | 
| 507 | -  mEncoder->Error(aError);
 | |
| 510 | +  MutexAutoLock lock(mMutex);
 | |
| 511 | +  if (mEncoder) {
 | |
| 512 | +    mEncoder->Error(aError);
 | |
| 513 | +  }
 | |
| 508 | 514 |  }
 | 
| 509 | 515 | |
| 510 | 516 |  // Force compiler to generate code.
 | 
| ... | ... | @@ -13,6 +13,7 @@ | 
| 13 | 13 | |
| 14 | 14 |  #include "mozilla/Maybe.h"
 | 
| 15 | 15 |  #include "mozilla/Monitor.h"
 | 
| 16 | +#include "mozilla/Mutex.h"
 | |
| 16 | 17 | |
| 17 | 18 |  namespace mozilla {
 | 
| 18 | 19 | |
| ... | ... | @@ -36,7 +37,15 @@ class AndroidDataEncoder final : public MediaDataEncoder { | 
| 36 | 37 |    class CallbacksSupport final : public JavaCallbacksSupport {
 | 
| 37 | 38 |     public:
 | 
| 38 | 39 |      explicit CallbacksSupport(AndroidDataEncoder* aEncoder)
 | 
| 39 | -        : mEncoder(aEncoder) {}
 | |
| 40 | +        : mMutex("AndroidDataEncoder::CallbacksSupport") {
 | |
| 41 | +      MutexAutoLock lock(mMutex);
 | |
| 42 | +      mEncoder = aEncoder;
 | |
| 43 | +    }
 | |
| 44 | + | |
| 45 | +    ~CallbacksSupport() {
 | |
| 46 | +      MutexAutoLock lock(mMutex);
 | |
| 47 | +      mEncoder = nullptr;
 | |
| 48 | +    }
 | |
| 40 | 49 | |
| 41 | 50 |      void HandleInput(int64_t aTimestamp, bool aProcessed) override;
 | 
| 42 | 51 |      void HandleOutput(java::Sample::Param aSample,
 | 
| ... | ... | @@ -46,7 +55,8 @@ class AndroidDataEncoder final : public MediaDataEncoder { | 
| 46 | 55 |      void HandleError(const MediaResult& aError) override;
 | 
| 47 | 56 | |
| 48 | 57 |     private:
 | 
| 49 | -    AndroidDataEncoder* mEncoder;
 | |
| 58 | +    Mutex mMutex;
 | |
| 59 | +    AndroidDataEncoder* mEncoder MOZ_GUARDED_BY(mMutex);
 | |
| 50 | 60 |    };
 | 
| 51 | 61 |    friend class CallbacksSupport;
 | 
| 52 | 62 |