aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fuse_signals.c
diff options
context:
space:
mode:
authorBernd Schubert <bernd.schubert@fastmail.fm>2024-03-20 13:30:12 +0100
committerGitHub <noreply@github.com>2024-03-20 13:30:12 +0100
commit694f3d5231e0ec4b25416db97ac113b4f89630d6 (patch)
tree860e0d6c96cd91858c2361a935b8fdd14532b68e /lib/fuse_signals.c
parenta6a219f5344a5c09cec34416818342ac220a0df2 (diff)
parent425f52a1f515cd0e2148a427330bb82c96b18856 (diff)
downloadlibfuse-694f3d5231e0ec4b25416db97ac113b4f89630d6.tar.gz
Merge pull request #904 from bsbernd/s-bit-fusermount
Add back s-bit for compiled fusermount
Diffstat (limited to 'lib/fuse_signals.c')
-rw-r--r--lib/fuse_signals.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/fuse_signals.c b/lib/fuse_signals.c
index 048d047..4c1d172 100644
--- a/lib/fuse_signals.c
+++ b/lib/fuse_signals.c
@@ -16,15 +16,30 @@
#include <string.h>
#include <signal.h>
#include <stdlib.h>
+#include <execinfo.h>
static struct fuse_session *fuse_instance;
+static void dump_stack(void)
+{
+#ifdef HAVE_BACKTRACE
+ const size_t backtrace_sz = 1024 * 1024;
+ void* backtrace_buffer[backtrace_sz];
+
+ int err_fd = fileno(stderr);
+
+ int trace_len = backtrace(backtrace_buffer, backtrace_sz);
+ backtrace_symbols_fd(backtrace_buffer, trace_len, err_fd);
+#endif
+}
+
static void exit_handler(int sig)
{
if (fuse_instance) {
fuse_session_exit(fuse_instance);
if(sig <= 0) {
fuse_log(FUSE_LOG_ERR, "assertion error: signal value <= 0\n");
+ dump_stack();
abort();
}
fuse_instance->error = sig;