From 26024088829a36698c57bf0b05dfc34f42adfc54 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 27 Sep 2012 03:42:08 +0000 Subject: backport mmap safety fix. SVN revision: 77114 --- ChangeLog | 9 ++++++++- NEWS | 9 ++++++++- src/lib/eina_mmap.c | 11 +++++++---- 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 -- cgit v1.2.1