commit 733fea5730bd1708472e1d9029bb4a1f0fded77c
parent 4fbcca506edc8576a737075a2adf2466c797efe4
Author: Remy Noulin <loader2x@gmail.com>
Date: Thu, 23 Sep 2021 13:06:36 +0200
fix coredump on segfaults. In segfault handler call default handler
release/libsheepy.c | 24 ++++++++++++------------
release/libsheepy.h | 2 +-
src/libsheepy.c | 24 ++++++++++++------------
src/libsheepy.h | 2 +-
4 files changed, 26 insertions(+), 26 deletions(-)
Diffstat:
4 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/release/libsheepy.c b/release/libsheepy.c
@@ -860,6 +860,8 @@ static char *progName = NULL;
static const char *defaultProgName = NULL;
static char *libSheepyRealProgPath = NULL;
+static struct sigaction default_sa = init0Var;
+
/**
* segmentation fault handler
*
@@ -881,13 +883,15 @@ internal void segfault_sigaction(int signal, siginfo_t *si, void *arg) {
/* realpath("/proc/self/exe", realProgPath); */
/* s = 'addr2line -e %s %s', realProgPath, addr */
/* systemNFree(s); */
- XFAILURE
+ // call default signal handler
+ default_sa.sa_sigaction(signal, si, arg);
}
+
#else // __arm__ || __aarch64__ || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__
internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED) {
- puts("Segfault");
- XFAILURE
+ // call default signal handler
+ default_sa.sa_sigaction(signal, si, arg);
}
#endif
@@ -1493,12 +1497,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
}
// segfault signal
- struct sigaction sa;
- memset(&sa, 0, sizeof(struct sigaction));
+ struct sigaction sa = init0Var;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;;
sa.sa_flags = SA_SIGINFO;;
- sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGSEGV, &sa, &default_sa);
// fibers
staticArrayInit(fibers.L);
@@ -1553,12 +1556,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
}
// segfault signal
- struct sigaction sa;
- memset(&sa, 0, sizeof(struct sigaction));
+ struct sigaction sa = init0Var;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;;
sa.sa_flags = SA_SIGINFO;;
- sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGSEGV, &sa, &default_sa);
// fibers
staticArrayInit(fibers.L);
@@ -1931,7 +1933,7 @@ time_t getCurrentUnixTime(void) {
*
*/
time_t strToUnixTime(const char *date, const char *format) {
- struct tm tm;
+ struct tm tm = init0Var;;
time_t r;
// sanity checks
@@ -1939,8 +1941,6 @@ time_t strToUnixTime(const char *date, const char *format) {
return(-1);
}
- memset(&tm, 0, sizeof tm);
-
if ((strptime(date, format, &tm))) {
r = mktime(&tm);
}
diff --git a/release/libsheepy.h b/release/libsheepy.h
@@ -98,7 +98,7 @@
// version accoring to the version package: Release.Major.minor.patch
// https://noulin.net/version/file/README.md.html
-#define LIBSHEEPY_VERSION "2.2.6.3"
+#define LIBSHEEPY_VERSION "2.2.6.4"
#ifndef SH_PREFIX
#define SH_PREFIX(NAME) NAME
diff --git a/src/libsheepy.c b/src/libsheepy.c
@@ -916,6 +916,8 @@ static char *progName = NULL;
static const char *defaultProgName = NULL;
static char *libSheepyRealProgPath = NULL;
+static struct sigaction default_sa = init0Var;
+
/**
* segmentation fault handler
*
@@ -937,13 +939,15 @@ internal void segfault_sigaction(int signal, siginfo_t *si, void *arg) {
/* realpath("/proc/self/exe", realProgPath); */
/* s = 'addr2line -e %s %s', realProgPath, addr */
/* systemNFree(s); */
- XFAILURE
+ // call default signal handler
+ default_sa.sa_sigaction(signal, si, arg);
}
+
#else // __arm__ || __aarch64__ || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__
internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED) {
- puts("Segfault");
- XFAILURE
+ // call default signal handler
+ default_sa.sa_sigaction(signal, si, arg);
}
#endif
@@ -1549,12 +1553,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
}
// segfault signal
- struct sigaction sa;
- memset(&sa, 0, sizeof(struct sigaction));
+ struct sigaction sa = init0Var;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;;
sa.sa_flags = SA_SIGINFO;;
- sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGSEGV, &sa, &default_sa);
// fibers
staticArrayInit(fibers.L);
@@ -1609,12 +1612,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
}
// segfault signal
- struct sigaction sa;
- memset(&sa, 0, sizeof(struct sigaction));
+ struct sigaction sa = init0Var;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;;
sa.sa_flags = SA_SIGINFO;;
- sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGSEGV, &sa, &default_sa);
// fibers
staticArrayInit(fibers.L);
@@ -1987,7 +1989,7 @@ time_t getCurrentUnixTime(void) {
*
*/
time_t strToUnixTime(const char *date, const char *format) {
- struct tm tm;
+ struct tm tm = init0Var;;
time_t r;
// sanity checks
@@ -1995,8 +1997,6 @@ time_t strToUnixTime(const char *date, const char *format) {
return(-1);
}
- memset(&tm, 0, sizeof tm);
-
if ((strptime(date, format, &tm))) {
r = mktime(&tm);
}
diff --git a/src/libsheepy.h b/src/libsheepy.h
@@ -98,7 +98,7 @@
// version accoring to the version package: Release.Major.minor.patch
// https://noulin.net/version/file/README.md.html
-#define LIBSHEEPY_VERSION "2.2.6.3"
+#define LIBSHEEPY_VERSION "2.2.6.4"
#ifndef SH_PREFIX
#define SH_PREFIX(NAME) NAME