extern char *partial_dir;
extern char *logfile_name;
+int called_from_signal_handler = 0;
BOOL shutting_down = False;
BOOL flush_ok_after_signal = False;
break;
}
+ if (called_from_signal_handler)
+ _exit(exit_code);
exit(exit_code);
}
extern int always_checksum;
extern int remove_source_files;
extern int output_needs_newline;
+extern int called_from_signal_handler;
extern int need_messages_from_generator;
extern int kluge_around_eof;
extern int got_xfer_error;
static void sigusr1_handler(UNUSED(int val))
{
+ called_from_signal_handler = 1;
exit_cleanup(RERR_SIGNAL1);
}
extern int allow_8bit_chars;
extern int protocol_version;
extern int got_kill_signal;
+extern int called_from_signal_handler;
extern int inc_recurse;
extern int inplace;
extern int flist_eof;
/* This is only called for SIGINT, SIGHUP, and SIGTERM. */
void sig_int(int sig_num)
{
+ called_from_signal_handler = 1;
+
/* KLUGE: if the user hits Ctrl-C while ssh is prompting
* for a password, then our cleanup's sending of a SIGUSR1
* signal to all our children may kill ssh before it has a
* we didn't already set the flag. */
if (!got_kill_signal && (am_server || am_receiver)) {
got_kill_signal = sig_num;
+ called_from_signal_handler = 0;
return;
}