diff options
author | Bernd Schubert <bernd.schubert@fastmail.fm> | 2024-03-20 13:30:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-20 13:30:12 +0100 |
commit | 694f3d5231e0ec4b25416db97ac113b4f89630d6 (patch) | |
tree | 860e0d6c96cd91858c2361a935b8fdd14532b68e /lib | |
parent | a6a219f5344a5c09cec34416818342ac220a0df2 (diff) | |
parent | 425f52a1f515cd0e2148a427330bb82c96b18856 (diff) | |
download | libfuse-694f3d5231e0ec4b25416db97ac113b4f89630d6.tar.gz |
Merge pull request #904 from bsbernd/s-bit-fusermount
Add back s-bit for compiled fusermount
Diffstat (limited to 'lib')
-rw-r--r-- | lib/fuse_signals.c | 15 |
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; |