summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2012-09-27 03:42:08 +0000
committerCarsten Haitzler <raster@rasterman.com>2012-09-27 03:42:08 +0000
commit26024088829a36698c57bf0b05dfc34f42adfc54 (patch)
tree347cbbdb803c4b4023c17125da00addc60186f44
parentbf41a5e786002f2b635921e65c63e2b1af5b3c8b (diff)
downloadeina-26024088829a36698c57bf0b05dfc34f42adfc54.tar.gz
backport mmap safety fix.
SVN revision: 77114
-rw-r--r--ChangeLog9
-rw-r--r--NEWS9
-rw-r--r--src/lib/eina_mmap.c11
3 files changed, 23 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index fc57f4f..67c027e 100644
--- 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
@@ -339,3 +339,10 @@
* 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
--- 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:
-------------------------
diff --git a/src/lib/eina_mmap.c b/src/lib/eina_mmap.c
index b99a542..90809a2 100644
--- a/src/lib/eina_mmap.c
+++ b/src/lib/eina_mmap.c
@@ -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