auto import from //branches/cupcake/...@125939
diff --git a/libs/utils/MemoryHeapBase.cpp b/libs/utils/MemoryHeapBase.cpp
index 59963c9..8251728 100644
--- a/libs/utils/MemoryHeapBase.cpp
+++ b/libs/utils/MemoryHeapBase.cpp
@@ -119,19 +119,24 @@
         // if it didn't work, let mmap() fail.
     }
 
-    void* base = (uint8_t*)mmap(0, size,
-            PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-    if (base == MAP_FAILED) {
-        LOGE("mmap(fd=%d, size=%u) failed (%s)",
-                fd, uint32_t(size), strerror(errno));
-        close(fd);
-        return -errno;
+    if ((mFlags & DONT_MAP_LOCALLY) == 0) {
+        void* base = (uint8_t*)mmap(0, size,
+                PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+        if (base == MAP_FAILED) {
+            LOGE("mmap(fd=%d, size=%u) failed (%s)",
+                    fd, uint32_t(size), strerror(errno));
+            close(fd);
+            return -errno;
+        }
+        //LOGD("mmap(fd=%d, base=%p, size=%lu)", fd, base, size);
+        mBase = base;
+        mNeedUnmap = true;
+    } else  {
+        mBase = 0; // not MAP_FAILED
+        mNeedUnmap = false;
     }
-    //LOGD("mmap(fd=%d, base=%p, size=%lu)", fd, base, size);
     mFD = fd;
-    mBase = base;
     mSize = size;
-    mNeedUnmap = true;
     return NO_ERROR;
 }