Commit c0531332 authored by Martin Pool's avatar Martin Pool

If configured with --enable-maintainer-mode, then on receipt of a

fatal signal rsync will try to open an xterm running gdb, similarly to
Samba's "panic action" or GNOME's bug-buddy.
parent 9098bbf3
...@@ -14,6 +14,9 @@ cut-down copy of release 1.5 is included in the rsync distribution, ...@@ -14,6 +14,9 @@ cut-down copy of release 1.5 is included in the rsync distribution,
and will be used it there is no popt library on your build host, or if and will be used it there is no popt library on your build host, or if
the --with-included-popt option is passed to ./configure. the --with-included-popt option is passed to ./configure.
If you configure using --enable-maintainer-mode, then rsync will try
to pop up an xterm on DISPLAY=:0 if it crashes. You might find this
useful, but it should be turned off for production builds.
HP-UX NOTES HP-UX NOTES
......
...@@ -9,6 +9,11 @@ rsync changes since last release ...@@ -9,6 +9,11 @@ rsync changes since last release
accepts a DESTDIR variable for help in building binary packages. accepts a DESTDIR variable for help in building binary packages.
(Peter Breitenlohner, Greg Louis) (Peter Breitenlohner, Greg Louis)
* If configured with --enable-maintainer-mode, then on receipt of
a fatal signal rsync will try to open an xterm running gdb,
similarly to Samba's "panic action" or GNOME's bug-buddy.
(Martin Pool)
BUG FIXES: BUG FIXES:
......
...@@ -65,6 +65,17 @@ then ...@@ -65,6 +65,17 @@ then
fi fi
# Specifically, this turns on panic_action handling.
AC_ARG_ENABLE(maintainer-mode,
AC_HELP_STRING([--enable-maintainer-mode],
[turn on extra debug features],
[], []))
if test x"$enable_maintainer_mode" = xyes
then
CFLAGS="$CFLAGS -DMAINTAINER_MODE"
fi
# This is needed for our included version of popt. Kind of silly, but # This is needed for our included version of popt. Kind of silly, but
# I don't want our version too far out of sync. # I don't want our version too far out of sync.
CFLAGS="$CFLAGS -DHAVE_CONFIG_H" CFLAGS="$CFLAGS -DHAVE_CONFIG_H"
......
...@@ -796,6 +796,39 @@ static RETSIGTYPE sigchld_handler(int UNUSED(val)) { ...@@ -796,6 +796,39 @@ static RETSIGTYPE sigchld_handler(int UNUSED(val)) {
#endif #endif
} }
/**
* This routine catches signals and tries to send them to gdb.
*
* Because it's called from inside a signal handler it ought not to
* use too many library routines.
*
* @todo Perhaps use "screen -X" instead/as well, to help people
* debugging without easy access to X. Perhaps use an environment
* variable, or just call a script?
*
* @todo The /proc/ magic probably only works on Linux (and
* Solaris?) Can we be more portable?
**/
#ifdef MAINTAINER_MODE
static RETSIGTYPE rsync_panic_handler(int UNUSED(whatsig))
{
char cmd_buf[300];
int ret;
sprintf(cmd_buf,
"xterm -display :0 -T Panic -n Panic "
"-e gdb /proc/%d/exe %d",
getpid(), getpid());
/* Unless we failed to execute gdb, we allow the process to
* continue. I'm not sure if that's right. */
ret = system(cmd_buf);
if (ret)
_exit(ret);
}
#endif
int main(int argc,char *argv[]) int main(int argc,char *argv[])
{ {
extern int am_root; extern int am_root;
...@@ -814,6 +847,12 @@ int main(int argc,char *argv[]) ...@@ -814,6 +847,12 @@ int main(int argc,char *argv[])
signal(SIGUSR1, sigusr1_handler); signal(SIGUSR1, sigusr1_handler);
signal(SIGUSR2, sigusr2_handler); signal(SIGUSR2, sigusr2_handler);
signal(SIGCHLD, sigchld_handler); signal(SIGCHLD, sigchld_handler);
#ifdef MAINTAINER_MODE
signal(SIGSEGV, rsync_panic_handler);
signal(SIGFPE, rsync_panic_handler);
signal(SIGABRT, rsync_panic_handler);
signal(SIGBUS, rsync_panic_handler);
#endif /* def MAINTAINER_MODE */
starttime = time(NULL); starttime = time(NULL);
am_root = (getuid() == 0); am_root = (getuid() == 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment