Fix bufferpool

Fix bufferpool carsh sporadically on invalidation. use android::sp
instead of android::wp for caching IObserver hidl interface.

Bug: 112203066
Change-Id: I69aafa11cc617f9ae36cce88283a3294fcab9bbd
diff --git a/media/bufferpool/2.0/AccessorImpl.h b/media/bufferpool/2.0/AccessorImpl.h
index 6b03494..b3faa96 100644
--- a/media/bufferpool/2.0/AccessorImpl.h
+++ b/media/bufferpool/2.0/AccessorImpl.h
@@ -34,7 +34,7 @@
 
 /**
  * An implementation of a buffer pool accessor(or a buffer pool implementation.) */
-class Accessor::Impl 
+class Accessor::Impl
     : public std::enable_shared_from_this<Accessor::Impl> {
 public:
     Impl(const std::shared_ptr<BufferPoolAllocator> &allocator);
@@ -69,6 +69,8 @@
 
     void handleInvalidateAck();
 
+    static void createInvalidator();
+
 private:
     // ConnectionId = pid : (timestamp_created + seqId)
     // in order to guarantee uniqueness for each connection
@@ -111,7 +113,7 @@
         std::set<BufferId> mFreeBuffers;
 
         struct Invalidation {
-            static std::atomic<std::uint32_t> sSeqId;
+            static std::atomic<std::uint32_t> sInvSeqId;
 
             struct Pending {
                 bool mNeedsAck;
@@ -128,18 +130,18 @@
                           mImpl(impl)
                 {}
 
-                bool invalidate(uint32_t bufferId) {
+                bool isInvalidated(uint32_t bufferId) {
                     return isBufferInRange(mFrom, mTo, bufferId) && --mLeft == 0;
                 }
             };
 
             std::list<Pending> mPendings;
             std::map<ConnectionId, uint32_t> mAcks;
-            std::map<ConnectionId, const wp<IObserver>> mObservers;
+            std::map<ConnectionId, const sp<IObserver>> mObservers;
             uint32_t mInvalidationId;
             uint32_t mId;
 
-            Invalidation() : mInvalidationId(0), mId(sSeqId.fetch_add(1)) {}
+            Invalidation() : mInvalidationId(0), mId(sInvSeqId.fetch_add(1)) {}
 
             void onConnect(ConnectionId conId, const sp<IObserver> &observer);
 
@@ -234,6 +236,8 @@
         void invalidate(bool needsAck, BufferId from, BufferId to,
                         const std::shared_ptr<Accessor::Impl> &impl);
 
+        static void createInvalidator();
+
     public:
         /** Creates a buffer pool. */
         BufferPool();
@@ -376,7 +380,7 @@
         void delAccessor(uint32_t accessorId);
     };
 
-    static AccessorInvalidator sInvalidator;
+    static std::unique_ptr<AccessorInvalidator> sInvalidator;
 
     static void invalidatorThread(
         std::map<uint32_t, const std::weak_ptr<Accessor::Impl>> &accessors,