mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
r8678: setup for gdb backtrace in 'make test'
(This used to be commit acf8c8fd49
)
This commit is contained in:
parent
f8c1258d01
commit
a369f0ecaf
@ -175,7 +175,7 @@ static int smb_print(struct smbcli_state *, char *, FILE *);
|
||||
* Setup the SAMBA server state...
|
||||
*/
|
||||
|
||||
setup_logging("smbspool", DEBUG_STDOUT);
|
||||
setup_logging(argv[0], DEBUG_STDOUT);
|
||||
|
||||
if (!lp_load()) {
|
||||
fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", lp_config_file());
|
||||
|
@ -48,6 +48,9 @@ static void popt_common_callback(poptContext con,
|
||||
const char *arg, const void *data)
|
||||
{
|
||||
const char *pname;
|
||||
|
||||
/* setup for panics */
|
||||
fault_setup(poptGetInvocationName(con));
|
||||
|
||||
if (reason == POPT_CALLBACK_REASON_POST) {
|
||||
/* Hook any 'every Samba program must do this, after
|
||||
|
@ -23,14 +23,13 @@
|
||||
#include "system/wait.h"
|
||||
#include "system/filesys.h"
|
||||
|
||||
static void (*cont_fn)(void *);
|
||||
|
||||
/* the registered fault handler */
|
||||
static struct {
|
||||
const char *name;
|
||||
void (*fault_handler)(int sig);
|
||||
} fault_handlers;
|
||||
|
||||
static const char *progname;
|
||||
|
||||
#ifdef HAVE_BACKTRACE
|
||||
#include <execinfo.h>
|
||||
@ -111,8 +110,16 @@ void smb_panic(const char *why)
|
||||
int result;
|
||||
|
||||
if (cmd && *cmd) {
|
||||
DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmd));
|
||||
result = system(cmd);
|
||||
char pidstr[20];
|
||||
char cmdstring[200];
|
||||
safe_strcpy(cmdstring, cmd, sizeof(cmdstring));
|
||||
snprintf(pidstr, sizeof(pidstr), "%u", getpid());
|
||||
all_string_sub(cmdstring, "%PID%", pidstr, sizeof(cmdstring));
|
||||
if (progname) {
|
||||
all_string_sub(cmdstring, "%PROG%", progname, sizeof(cmdstring));
|
||||
}
|
||||
DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmdstring));
|
||||
result = system(cmdstring);
|
||||
|
||||
if (result == -1)
|
||||
DEBUG(0, ("smb_panic(): fork failed in panic action: %s\n",
|
||||
@ -147,19 +154,6 @@ static void fault_report(int sig)
|
||||
|
||||
smb_panic("internal error");
|
||||
|
||||
if (cont_fn) {
|
||||
cont_fn(NULL);
|
||||
#ifdef SIGSEGV
|
||||
CatchSignal(SIGSEGV,SIGNAL_CAST SIG_DFL);
|
||||
#endif
|
||||
#ifdef SIGBUS
|
||||
CatchSignal(SIGBUS,SIGNAL_CAST SIG_DFL);
|
||||
#endif
|
||||
#ifdef SIGABRT
|
||||
CatchSignal(SIGABRT,SIGNAL_CAST SIG_DFL);
|
||||
#endif
|
||||
return; /* this should cause a core dump */
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -179,10 +173,11 @@ static void sig_fault(int sig)
|
||||
/*******************************************************************
|
||||
setup our fault handlers
|
||||
********************************************************************/
|
||||
void fault_setup(void (*fn)(void *))
|
||||
void fault_setup(const char *pname)
|
||||
{
|
||||
cont_fn = fn;
|
||||
|
||||
if (progname == NULL) {
|
||||
progname = pname;
|
||||
}
|
||||
#ifdef SIGSEGV
|
||||
CatchSignal(SIGSEGV,SIGNAL_CAST sig_fault);
|
||||
#endif
|
||||
|
17
source4/script/gdb_backtrace
Executable file
17
source4/script/gdb_backtrace
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
# we want everything on stderr, so the program is not disturbed
|
||||
exec 1>&2
|
||||
|
||||
PID=$1
|
||||
PROG=$2
|
||||
|
||||
TMPFILE=/tmp/gdb.$$
|
||||
cat << EOF > $TMPFILE
|
||||
set height 1000
|
||||
bt full
|
||||
quit
|
||||
EOF
|
||||
|
||||
gdb -batch -x $TMPFILE $PROG $PID < /dev/null
|
||||
/bin/rm -f $TMPFILE
|
@ -92,6 +92,7 @@ cat >$CONFFILE<<EOF
|
||||
name resolve order = bcast
|
||||
interfaces = lo*
|
||||
tls enabled = $TLS_ENABLED
|
||||
panic action = $SRCDIR/script/gdb_backtrace %PID% %PROG%
|
||||
|
||||
[tmp]
|
||||
path = $TMPDIR
|
||||
|
@ -45,6 +45,7 @@ void ejs_exception(const char *reason)
|
||||
struct MprVar *return_var;
|
||||
int exit_status, i;
|
||||
|
||||
fault_setup(argv[0]);
|
||||
smbscript_init_subsystems;
|
||||
mprSetCtx(mem_ctx);
|
||||
|
||||
|
@ -96,8 +96,6 @@ static void cleanup_tmp_files(void)
|
||||
*/
|
||||
static void setup_signals(void)
|
||||
{
|
||||
fault_setup(NULL);
|
||||
|
||||
/* we are never interested in SIGPIPE */
|
||||
BlockSignals(True,SIGPIPE);
|
||||
|
||||
@ -175,7 +173,7 @@ static int binary_smbd_main(int argc, const char *argv[])
|
||||
|
||||
poptFreeContext(pc);
|
||||
|
||||
setup_logging(NULL, interactive?DEBUG_STDOUT:DEBUG_FILE);
|
||||
setup_logging(argv[0], interactive?DEBUG_STDOUT:DEBUG_FILE);
|
||||
setup_signals();
|
||||
|
||||
/* we want total control over the permissions on created files,
|
||||
|
Loading…
Reference in New Issue
Block a user