diff options
author | Daniel Black <daniel@mariadb.org> | 2022-06-18 17:42:29 +0300 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2022-06-18 21:14:04 +0300 |
commit | d4539426bc23628efc69819130e4cb4a88d124ad (patch) | |
tree | b43d7d5c2e3ebf116aa774137840b1f6a4980572 | |
parent | f299351e1c2aa00dcce3c6f58c58bb5e28469c61 (diff) | |
download | mariadb-git-d4539426bc23628efc69819130e4cb4a88d124ad.tar.gz |
MDEV-28884: include kernel information in crashing signal handler
Recent adventures in liburing and btrfs have shown up some kernel
version dependent bugs. Having a bug report of accurace kernel version
can start to correlate these errors sooner.
On Linux, /proc/version contains the kernel version.
FreeBSD has kern.version (per man 8 sysctl), so include that too.
Example output:
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
Core pattern: |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
Kernel version: Linux version 5.19.0-0.rc2.21.fc37.x86_64 (mockbuild@bkernel01.iad2.fedoraproject.org) (gcc (GCC) 12.1.1 20220507 (Red Hat 12.1.1-1), GNU ld version 2.38-14.fc37) #1 SMP PREEMPT_DYNAMIC Mon Jun 13 15:27:24 UTC 2022
Segmentation fault (core dumped)
-rw-r--r-- | sql/signal_handler.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sql/signal_handler.cc b/sql/signal_handler.cc index c0f31077e4d..915291185d5 100644 --- a/sql/signal_handler.cc +++ b/sql/signal_handler.cc @@ -81,6 +81,12 @@ static inline void output_core_info() my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff); my_close(fd, MYF(0)); } + if ((fd= my_open("/proc/version", O_RDONLY, MYF(0))) >= 0) + { + len= my_read(fd, (uchar*)buff, sizeof(buff), MYF(0)); + my_safe_printf_stderr("Kernel version: %.*s\n", (int) len, buff); + my_close(fd, MYF(0)); + } #endif #elif defined(__APPLE__) || defined(__FreeBSD__) char buff[PATH_MAX]; @@ -89,6 +95,10 @@ static inline void output_core_info() { my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff); } + if (sysctlbyname("kern.version", buff, &len, NULL, 0) == 0) + { + my_safe_printf_stderr("Kernel version: %.*s\n", (int) len, buff); + } #else char buff[80]; my_getwd(buff, sizeof(buff), 0); |