Revert "gralloc: Allow unmapping concurrent handles"

This reverts commit a3a9aaa5bbf0a94f1039e3eda368fa8a28ddecf8.
diff --git a/exynos4/hal/libgralloc_ump/gralloc_module.cpp b/exynos4/hal/libgralloc_ump/gralloc_module.cpp
index 79c4750..3bbb831 100644
--- a/exynos4/hal/libgralloc_ump/gralloc_module.cpp
+++ b/exynos4/hal/libgralloc_ump/gralloc_module.cpp
@@ -318,40 +318,43 @@
     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;
+            }
+            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);
-        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");
     }
 
-    pthread_mutex_unlock(&s_map_lock);
-
     return 0;
 }