backport mmap safety fix.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 27 Sep 2012 03:42:08 +0000 (03:42 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 27 Sep 2012 03:42:08 +0000 (03:42 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/branches/eina-1.7@77114 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
NEWS
src/lib/eina_mmap.c

index fc57f4f..67c027e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,4 @@
-2011-01-29  Carsten Haitzler (The Rasterman)
+]2011-01-29  Carsten Haitzler (The Rasterman)
 
         1.0.0 release
 
         * Add check if given arguments (distance and coordinates) in eina_tiler
         and eina_rectangle are not below zero
         * Documentation for eina list specified and eina stringshare fixed
+
+2012-09-27  Carsten Haitzler (The Rasterman)
+
+        * Fix return value of eina_mmap_safety_enabled_set() and
+        ensure future eina_mmap_safety_enabled_get() return right value
+        on success.
+        
diff --git a/NEWS b/NEWS
index a17ec50..27fd1ab 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,11 @@
-Eina 1.7.0
+Eina 1.7.1
+
+Changes since Eina 1.7.0:
+-------------------------
+
+Fixes:
+    * Fix return value of eina_mmap_safety_enabled_set() and future
+    eina_mmap_safety_enabled_get() returns after success
 
 Changes since Eina 1.2.0:
 -------------------------
index b99a542..90809a2 100644 (file)
@@ -164,10 +164,7 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled)
         sa.sa_sigaction = _eina_mmap_safe_sigbus;
         sa.sa_flags = SA_RESTART | SA_SIGINFO;
         sigemptyset(&sa.sa_mask);
-        /* FIXME: This is rubbish. We return EINA_FALSE whether sigaction
-         * fails or not. And we never set mmap_safe, so we always hit this
-         * code path. */
-        if (sigaction(SIGBUS, &sa, NULL) == 0) return EINA_FALSE;
+        if (sigaction(SIGBUS, &sa, NULL) == 0) goto done;
         /* setup of SIGBUS handler failed, lets close zero page dev and fail */
         close(_eina_mmap_zero_fd);
         _eina_mmap_zero_fd = -1;
@@ -176,8 +173,14 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled)
    else
      {
         /* reset signal handler to default for SIGBUS */
+        if (_eina_mmap_zero_fd >= 0)
+          {
+             close(_eina_mmap_zero_fd);
+             _eina_mmap_zero_fd = -1;
+          }
         signal(SIGBUS, SIG_DFL);
      }
+done:   
    mmap_safe = enabled;
    return mmap_safe;
 #endif