… | |
… | |
2923 | prio => 6, |
2923 | prio => 6, |
2924 | cb => \&IO::AIO::poll_cb, |
2924 | cb => \&IO::AIO::poll_cb, |
2925 | ); |
2925 | ); |
2926 | } |
2926 | } |
2927 | |
2927 | |
|
|
2928 | sub _log_backtrace { |
|
|
2929 | my ($msg, @addr) = @_; |
|
|
2930 | |
|
|
2931 | async { |
|
|
2932 | my @bt = fork_call { |
|
|
2933 | @addr = map { sprintf "%x", $_ } @addr; |
|
|
2934 | open my $fh, "exec addr2line -C -f -i -e \Q$^X\E @addr 2>&1 |" |
|
|
2935 | or die "addr2line: $!"; |
|
|
2936 | |
|
|
2937 | my @funcs; |
|
|
2938 | my @res = <$fh>; |
|
|
2939 | chomp for @res; |
|
|
2940 | while (@res) { |
|
|
2941 | my ($func, $line) = splice @res, 0, 2, (); |
|
|
2942 | push @funcs, "[$func] $line"; |
|
|
2943 | } |
|
|
2944 | |
|
|
2945 | @funcs |
|
|
2946 | }; |
|
|
2947 | |
|
|
2948 | $msg =~ s/\n//; |
|
|
2949 | |
|
|
2950 | LOG llevInfo, "[ABT] $msg\n"; |
|
|
2951 | LOG llevInfo, "[ABT] $_\n" for @bt; |
|
|
2952 | }; |
|
|
2953 | } |
|
|
2954 | |
2928 | # load additional modules |
2955 | # load additional modules |
2929 | use cf::pod; |
2956 | use cf::pod; |
2930 | |
2957 | |
2931 | END { cf::emergency_save } |
2958 | END { cf::emergency_save } |
2932 | |
2959 | |