From 3c772b706dd8e53fe17b284bb2e60c146867f787 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 19 Apr 2010 19:09:03 -0700 Subject: [PATCH] fix [2599939] "cannot play video" after open/close a video player a dozen of times get rid off the MAP_ONCE flag is MemoryHeapBase (as well as it's functionality), this feature should not be used anymore. the software renderer was incorrectly using the default ctor which set MAP_ONCE, causing the leak. the software renderer itself is incorrectly used while coming back from sleep. Change-Id: I123621f8d140550b864f352bbcd8a5729db12b57 --- include/binder/IMemory.h | 3 +-- include/binder/MemoryHeapBase.h | 1 - include/binder/MemoryHeapPmem.h | 3 +-- libs/binder/IMemory.cpp | 23 ----------------------- 4 files changed, 2 insertions(+), 28 deletions(-) diff --git a/include/binder/IMemory.h b/include/binder/IMemory.h index ae042cba55..74d2cc7816 100644 --- a/include/binder/IMemory.h +++ b/include/binder/IMemory.h @@ -36,8 +36,7 @@ public: // flags returned by getFlags() enum { - READ_ONLY = 0x00000001, - MAP_ONCE = 0x00000002 + READ_ONLY = 0x00000001 }; virtual int getHeapID() const = 0; diff --git a/include/binder/MemoryHeapBase.h b/include/binder/MemoryHeapBase.h index d793c240f9..2f2e31b380 100644 --- a/include/binder/MemoryHeapBase.h +++ b/include/binder/MemoryHeapBase.h @@ -32,7 +32,6 @@ class MemoryHeapBase : public virtual BnMemoryHeap public: enum { READ_ONLY = IMemoryHeap::READ_ONLY, - MAP_ONCE = IMemoryHeap::MAP_ONCE, // memory won't be mapped locally, but will be mapped in the remote // process. DONT_MAP_LOCALLY = 0x00000100, diff --git a/include/binder/MemoryHeapPmem.h b/include/binder/MemoryHeapPmem.h index aac164f72b..e1660c4bb1 100644 --- a/include/binder/MemoryHeapPmem.h +++ b/include/binder/MemoryHeapPmem.h @@ -46,8 +46,7 @@ public: sp mClientHeap; }; - MemoryHeapPmem(const sp& pmemHeap, - uint32_t flags = IMemoryHeap::MAP_ONCE); + MemoryHeapPmem(const sp& pmemHeap, uint32_t flags = 0); ~MemoryHeapPmem(); /* HeapInterface additions */ diff --git a/libs/binder/IMemory.cpp b/libs/binder/IMemory.cpp index 6c1d2253b6..bc8c412fb0 100644 --- a/libs/binder/IMemory.cpp +++ b/libs/binder/IMemory.cpp @@ -46,7 +46,6 @@ public: virtual void binderDied(const wp& who); sp find_heap(const sp& binder); - void pin_heap(const sp& binder); void free_heap(const sp& binder); sp get_heap(const sp& binder); void dump_heaps(); @@ -100,13 +99,9 @@ private: static inline void dump_heaps() { gHeapCache->dump_heaps(); } - void inline pin_heap() const { - gHeapCache->pin_heap(const_cast(this)->asBinder()); - } void assertMapped() const; void assertReallyMapped() const; - void pinHeap() const; mutable volatile int32_t mHeapId; mutable void* mBase; @@ -320,11 +315,6 @@ void BpMemoryHeap::assertReallyMapped() const asBinder().get(), size, fd, strerror(errno)); close(fd); } else { - if (flags & MAP_ONCE) { - //LOGD("pinning heap (binder=%p, size=%d, fd=%d", - // asBinder().get(), size, fd); - pin_heap(); - } mSize = size; mFlags = flags; android_atomic_write(fd, &mHeapId); @@ -421,19 +411,6 @@ sp HeapCache::find_heap(const sp& binder) } } -void HeapCache::pin_heap(const sp& binder) -{ - Mutex::Autolock _l(mHeapCacheLock); - ssize_t i = mHeapCache.indexOfKey(binder); - if (i>=0) { - heap_info_t& info(mHeapCache.editValueAt(i)); - android_atomic_inc(&info.count); - binder->linkToDeath(this); - } else { - LOGE("pin_heap binder=%p not found!!!", binder.get()); - } -} - void HeapCache::free_heap(const sp& binder) { free_heap( wp(binder) ); } -- 2.11.0