From fbfb3ec61af35c1850f2e5baec4a8fb3b1807e2c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 27 Sep 2012 03:46:03 +0000 Subject: [PATCH] port mmap safety fix to efl tree. SVN revision: 77115 --- ChangeLog | 6 ++++++ NEWS | 3 +++ src/lib/eina/eina_mmap.c | 11 +++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4f5fb49f17..0cfd515511 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +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. + 2012-09-21 Carsten Haitzler (The Rasterman) * Fix big endian bug with eet image handling and endianess swapping. diff --git a/NEWS b/NEWS index 13fa7d056e..6ae1c9cc50 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ EFL 1.8.0 ========= Changes since 1.7.0: +-------------------- Additions: * Add DOCTYPE children parsing in eina_simple_xml @@ -14,3 +15,5 @@ Improvements: Fixes: * Fix PPC (big endian) image codec bug. + * Fix return value of eina_mmap_safety_enabled_set() and future + eina_mmap_safety_enabled_get() returns after success diff --git a/src/lib/eina/eina_mmap.c b/src/lib/eina/eina_mmap.c index b99a542939..90809a23bb 100644 --- a/src/lib/eina/eina_mmap.c +++ b/src/lib/eina/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