Remove unecessary file descriptor lock.

Upstreamed to Skia: http://codereview.appspot.com/5467058/

bug: 5473038
Change-Id: I1abfc2092dc4fb2aeee34e4ba07b06217955023e
diff --git a/include/core/SkMMapStream.h b/include/core/SkMMapStream.h
index be063bd..151ad87 100644
--- a/include/core/SkMMapStream.h
+++ b/include/core/SkMMapStream.h
@@ -26,7 +26,6 @@
 
     virtual void setMemory(const void* data, size_t length, bool);
 private:
-    int     fFildes;
     void*   fAddr;
     size_t  fSize;
     
diff --git a/src/core/SkMMapStream.cpp b/src/core/SkMMapStream.cpp
index 78cb3f3..18d4760 100644
--- a/src/core/SkMMapStream.cpp
+++ b/src/core/SkMMapStream.cpp
@@ -7,7 +7,7 @@
 
 SkMMAPStream::SkMMAPStream(const char filename[])
 {
-    fFildes = -1;   // initialize to failure case
+    fAddr = NULL;   // initialize to failure case
 
     int fildes = open(filename, O_RDONLY);
     if (fildes < 0)
@@ -29,16 +29,21 @@
     size_t size = static_cast<size_t>(offset);
 
     void* addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fildes, 0);
+
+    // According to the POSIX documentation of mmap it adds an extra reference
+    // to the file associated with the fildes which is not removed by a
+    // subsequent close() on that fildes. This reference is removed when there
+    // are no more mappings to the file.
+    close(fildes);
+
     if (MAP_FAILED == addr)
     {
         SkDEBUGF(("---- failed to mmap(%s) for mmap stream error=%d\n", filename, errno));
-        close(fildes);
         return;
     }
 
     this->INHERITED::setMemory(addr, size);
 
-    fFildes = fildes;
     fAddr = addr;
     fSize = size;
 }
@@ -56,11 +61,10 @@
 
 void SkMMAPStream::closeMMap()
 {
-    if (fFildes >= 0)
+    if (fAddr)
     {
         munmap(fAddr, fSize);
-        close(fFildes);
-        fFildes = -1;
+        fAddr = NULL;
     }
 }