ALOGE_IF(hnd->lockState & private_handle_t::LOCK_STATE_READ_MASK,
"[unregister] handle %p still locked (state=%08x)", hnd, hnd->lockState);
- pthread_mutex_lock(&s_map_lock);
- if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_UMP) {
- ump_mapped_pointer_release((ump_handle)hnd->ump_mem_handle);
- hnd->base = 0;
- ump_reference_release((ump_handle)hnd->ump_mem_handle);
- hnd->ump_mem_handle = (int)UMP_INVALID_MEMORY_HANDLE;
- hnd->lockState = 0;
- hnd->writeOwner = 0;
- } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_IOCTL) {
- if(hnd->base != 0)
- gralloc_unmap(module, handle);
+ /* never unmap buffers that were created in this process */
+ if (hnd->pid != getpid()) {
+ pthread_mutex_lock(&s_map_lock);
+ if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_UMP) {
+ ump_mapped_pointer_release((ump_handle)hnd->ump_mem_handle);
+ hnd->base = 0;
+ ump_reference_release((ump_handle)hnd->ump_mem_handle);
+ hnd->ump_mem_handle = (int)UMP_INVALID_MEMORY_HANDLE;
+ hnd->lockState = 0;
+ hnd->writeOwner = 0;
+ } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_IOCTL) {
+ if(hnd->base != 0)
+ gralloc_unmap(module, handle);
- pthread_mutex_unlock(&s_map_lock);
- if (0 < gMemfd) {
- close(gMemfd);
- gMemfd = 0;
+ pthread_mutex_unlock(&s_map_lock);
+ if (0 < gMemfd) {
+ close(gMemfd);
+ gMemfd = 0;
+ }
+ return 0;
+ } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_ION) {
+ ump_mapped_pointer_release((ump_handle)hnd->ump_mem_handle);
+ ump_reference_release((ump_handle)hnd->ump_mem_handle);
+ if (hnd->base)
+ gralloc_unmap(module, handle);
+
+ hnd->base = 0;
+ hnd->ump_mem_handle = (int)UMP_INVALID_MEMORY_HANDLE;
+ hnd->lockState = 0;
+ hnd->writeOwner = 0;
+ } else {
+ ALOGE("unregistering non-UMP buffer not supported");
}
- return 0;
- } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_ION) {
- ump_mapped_pointer_release((ump_handle)hnd->ump_mem_handle);
- ump_reference_release((ump_handle)hnd->ump_mem_handle);
- if (hnd->base)
- gralloc_unmap(module, handle);
-
- hnd->base = 0;
- hnd->ump_mem_handle = (int)UMP_INVALID_MEMORY_HANDLE;
- hnd->lockState = 0;
- hnd->writeOwner = 0;
- } else {
- ALOGE("unregistering non-UMP buffer not supported");
- }
- pthread_mutex_unlock(&s_map_lock);
+ pthread_mutex_unlock(&s_map_lock);
+ }
return 0;
}