Repository: trafficserver Updated Branches: refs/heads/master ab0844c82 -> c6899fb98
[TS-2665] Clean up ink_stack_trace_dump code Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/c6899fb9 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/c6899fb9 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/c6899fb9 Branch: refs/heads/master Commit: c6899fb9873902426580bffb84a1206c6cfdf7b1 Parents: ab0844c Author: Brian Geffon <[email protected]> Authored: Wed Mar 26 11:46:30 2014 -0700 Committer: Brian Geffon <[email protected]> Committed: Wed Mar 26 11:46:30 2014 -0700 ---------------------------------------------------------------------- CHANGES | 3 +++ lib/ts/ink_stack_trace.cc | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/c6899fb9/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index acfb425..24b9357 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache Traffic Server 5.0.0 + *) [TS-2665] Clean up ink_stack_trace_dump code + Thanks to Alexey Ivanov <[email protected]> for reporting this issue. + *) [TS-2663] Wrong condition on log code for server connection errors. Author: David Binderman <[email protected]> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/c6899fb9/lib/ts/ink_stack_trace.cc ---------------------------------------------------------------------- diff --git a/lib/ts/ink_stack_trace.cc b/lib/ts/ink_stack_trace.cc index 3e194dd..17f9ddc 100644 --- a/lib/ts/ink_stack_trace.cc +++ b/lib/ts/ink_stack_trace.cc @@ -29,6 +29,10 @@ #include <stdlib.h> #include <unistd.h> +#ifndef STDERR_FILENO +#define STDERR_FILENO 2 +#endif + #if TS_HAS_BACKTRACE #include <execinfo.h> /* for backtrace_symbols, etc. */ @@ -40,19 +44,22 @@ ink_stack_trace_dump() int btl; // Recopy and re-terminate the app name in case it has been trashed. - char name[256]; const char *msg = " - STACK TRACE: \n"; - ink_strlcpy(name, program_name, sizeof(name)); - if (write(2, name, strlen(name)) == -1) + if (write(STDERR_FILENO, program_name, strlen(program_name)) == -1) return; - if (write(2, msg, strlen(msg)) == -1) + if (write(STDERR_FILENO, msg, strlen(msg)) == -1) return; + // In certain situations you can get stuck in malloc waiting for a lock + // that your program held when it segfaulted. We set an alarm so that + // if this situation happens it will allow traffic_server to exit. + alarm(10); + void *stack[INK_STACK_TRACE_MAX_LEVELS + 1]; memset(stack, 0, sizeof(stack)); if ((btl = backtrace(stack, INK_STACK_TRACE_MAX_LEVELS)) > 2) { // dump the backtrace to stderr - backtrace_symbols_fd(stack + 2, btl - 2, 2); + backtrace_symbols_fd(stack + 2, btl - 2, STDERR_FILENO); } } @@ -62,7 +69,7 @@ void ink_stack_trace_dump() { const char msg[] = "ink_stack_trace_dump not implemented on this operating system\n"; - if (write(2, msg, sizeof(msg) - 1) == -1) + if (write(STDERR_FILENO, msg, sizeof(msg) - 1) == -1) return; }
