You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by br...@apache.org on 2014/03/26 19:46:35 UTC
git commit: [TS-2665] Clean up ink_stack_trace_dump code
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 <br...@apache.org>
Authored: Wed Mar 26 11:46:30 2014 -0700
Committer: Brian Geffon <br...@apache.org>
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 <ai...@linkedin.com> for reporting this issue.
+
*) [TS-2663] Wrong condition on log code for server connection errors.
Author: David Binderman <dc...@hotmail.com>
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;
}