eina: fix siginfo detection.
Signal are not a portable way to detect memory mapped file corruption. So let's disable it for system without signal and later find a way to detect it on other system.
This commit is contained in:
parent
5adb2f1ae6
commit
884c31df41
|
@ -327,6 +327,14 @@ AC_SUBST([EINA_SIZEOF_WCHAR_T])
|
||||||
AC_CHECK_SIZEOF(int, 4)
|
AC_CHECK_SIZEOF(int, 4)
|
||||||
AC_CHECK_SIZEOF(long, 4)
|
AC_CHECK_SIZEOF(long, 4)
|
||||||
|
|
||||||
|
AC_CHECK_TYPES([siginfo_t], [], [],
|
||||||
|
[[
|
||||||
|
#include <signal.h>
|
||||||
|
#if HAVE_SIGINFO_H
|
||||||
|
# include <siginfo.h>
|
||||||
|
#endif
|
||||||
|
]])
|
||||||
|
|
||||||
#### Checks for structures
|
#### Checks for structures
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SIGINFO_T
|
||||||
|
|
||||||
#ifdef STDC_HEADERS
|
#ifdef STDC_HEADERS
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
|
@ -41,6 +43,12 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if HAVE_SIGINFO_H
|
||||||
|
# include <siginfo.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "eina_config.h"
|
#include "eina_config.h"
|
||||||
#include "eina_private.h"
|
#include "eina_private.h"
|
||||||
#include "eina_log.h"
|
#include "eina_log.h"
|
||||||
|
@ -51,6 +59,7 @@
|
||||||
*============================================================================*/
|
*============================================================================*/
|
||||||
|
|
||||||
static Eina_Bool mmap_safe = EINA_FALSE;
|
static Eina_Bool mmap_safe = EINA_FALSE;
|
||||||
|
#ifdef HAVE_SIGINFO_T
|
||||||
|
|
||||||
static int _eina_mmap_log_dom = -1;
|
static int _eina_mmap_log_dom = -1;
|
||||||
static int _eina_mmap_zero_fd = -1;
|
static int _eina_mmap_zero_fd = -1;
|
||||||
|
@ -106,6 +115,7 @@ _eina_mmap_safe_sigbus(int sig EINA_UNUSED,
|
||||||
/* restore previous errno */
|
/* restore previous errno */
|
||||||
errno = perrno;
|
errno = perrno;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*============================================================================*
|
/*============================================================================*
|
||||||
* API *
|
* API *
|
||||||
|
@ -114,6 +124,10 @@ _eina_mmap_safe_sigbus(int sig EINA_UNUSED,
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
eina_mmap_safety_enabled_set(Eina_Bool enabled)
|
eina_mmap_safety_enabled_set(Eina_Bool enabled)
|
||||||
{
|
{
|
||||||
|
#ifndef HAVE_SIGINFO_T
|
||||||
|
(void) enabled;
|
||||||
|
return EINA_FALSE;
|
||||||
|
#else
|
||||||
if (_eina_mmap_log_dom < 0)
|
if (_eina_mmap_log_dom < 0)
|
||||||
{
|
{
|
||||||
_eina_mmap_log_dom = eina_log_domain_register("eina_mmap",
|
_eina_mmap_log_dom = eina_log_domain_register("eina_mmap",
|
||||||
|
@ -155,7 +169,7 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled)
|
||||||
flags |= FD_CLOEXEC;
|
flags |= FD_CLOEXEC;
|
||||||
fcntl(_eina_mmap_zero_fd, F_SETFD, flags);
|
fcntl(_eina_mmap_zero_fd, F_SETFD, flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
/* set up signal handler for SIGBUS */
|
/* set up signal handler for SIGBUS */
|
||||||
sa.sa_sigaction = _eina_mmap_safe_sigbus;
|
sa.sa_sigaction = _eina_mmap_safe_sigbus;
|
||||||
|
@ -180,6 +194,7 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled)
|
||||||
done:
|
done:
|
||||||
mmap_safe = enabled;
|
mmap_safe = enabled;
|
||||||
return mmap_safe;
|
return mmap_safe;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
|
|
Loading…
Reference in New Issue