diff options
author | Carsten Haitzler <raster@rasterman.com> | 2012-09-27 03:42:08 +0000 |
---|---|---|
committer | Carsten Haitzler <raster@rasterman.com> | 2012-09-27 03:42:08 +0000 |
commit | 26024088829a36698c57bf0b05dfc34f42adfc54 (patch) | |
tree | 347cbbdb803c4b4023c17125da00addc60186f44 | |
parent | bf41a5e786002f2b635921e65c63e2b1af5b3c8b (diff) | |
download | eina-26024088829a36698c57bf0b05dfc34f42adfc54.tar.gz |
backport mmap safety fix.
SVN revision: 77114
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | NEWS | 9 | ||||
-rw-r--r-- | src/lib/eina_mmap.c | 11 |
3 files changed, 23 insertions, 6 deletions
@@ -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. + @@ -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 |