Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebc8557f authored by Pat Plunkett's avatar Pat Plunkett Committed by android-build-merger
Browse files

Merge "Clear callbacks when destroying DvrHwcClient" into oc-dr1-dev am: 222b7600

am: cf14ce09

Change-Id: I955f9dfa14e9772103fd7fc7a00a29757228f26a
parents 8bd5059a cf14ce09
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -100,10 +100,13 @@ DvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback, void* data) {
}

void dvrHwcClientDestroy(DvrHwcClient* client) {
  client->composer->clearObserver();

  // NOTE: Deleting DvrHwcClient* isn't enough since DvrHwcClient::callback is a
  // shared pointer that could be referenced from a binder thread. But the
  // client callback isn't valid past this calls so that needs to be reset.
  client->callback->Shutdown();

  delete client;
}

+5 −0
Original line number Diff line number Diff line
@@ -17,4 +17,9 @@ interface IVrComposer
   * Registers a callback used to receive frame notifications.
   */
  void registerObserver(in IVrComposerCallback callback);

  /**
   * Clears a previously registered frame notification callback.
   */
  void clearObserver();
}
+6 −0
Original line number Diff line number Diff line
@@ -42,6 +42,12 @@ binder::Status VrComposer::registerObserver(
  return binder::Status::ok();
}

binder::Status VrComposer::clearObserver() {
  std::lock_guard<std::mutex> guard(mutex_);
  callback_ = nullptr;
  return binder::Status::ok();
}

base::unique_fd VrComposer::OnNewFrame(const ComposerView::Frame& frame) {
  std::lock_guard<std::mutex> guard(mutex_);

+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ class VrComposer
  binder::Status registerObserver(
      const sp<IVrComposerCallback>& callback) override;

  binder::Status clearObserver() override;

  // ComposerView::Observer:
  base::unique_fd OnNewFrame(const ComposerView::Frame& frame) override;