[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Sun Apr 5 17:28:00 UTC 2020


The branch, master has been updated
       via  b32aa479 Make exit_cleanup() use _exit() if called from a signal handler. Fixes bug #13982.
      from  826ddc54 Enhance the validation of --block-size for older protocols. Fixes bug #13974.

https://git.samba.org/?p=rsync.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b32aa4797d8f9307c37351aaf23e0606fe33628c
Author: Wayne Davison <wayned at samba.org>
Date:   Sun Apr 5 10:26:40 2020 -0700

    Make exit_cleanup() use _exit() if called from a signal handler.
    Fixes bug #13982.

-----------------------------------------------------------------------

Summary of changes:
 cleanup.c | 3 +++
 main.c    | 2 ++
 rsync.c   | 4 ++++
 3 files changed, 9 insertions(+)


Changeset truncated at 500 lines:

diff --git a/cleanup.c b/cleanup.c
index 8cde0389..51130caf 100644
--- a/cleanup.c
+++ b/cleanup.c
@@ -34,6 +34,7 @@ extern int output_needs_newline;
 extern char *partial_dir;
 extern char *logfile_name;
 
+int called_from_signal_handler = 0;
 BOOL shutting_down = False;
 BOOL flush_ok_after_signal = False;
 
@@ -260,6 +261,8 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
 		break;
 	}
 
+	if (called_from_signal_handler)
+		_exit(exit_code);
 	exit(exit_code);
 }
 
diff --git a/main.c b/main.c
index f7905494..eda8d624 100644
--- a/main.c
+++ b/main.c
@@ -39,6 +39,7 @@ extern int blocking_io;
 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;
@@ -1536,6 +1537,7 @@ static int start_client(int argc, char *argv[])
 
 static void sigusr1_handler(UNUSED(int val))
 {
+	called_from_signal_handler = 1;
 	exit_cleanup(RERR_SIGNAL1);
 }
 
diff --git a/rsync.c b/rsync.c
index 4d173037..b8d9acb9 100644
--- a/rsync.c
+++ b/rsync.c
@@ -43,6 +43,7 @@ extern int am_starting_up;
 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;
@@ -613,6 +614,8 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
 /* 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
@@ -636,6 +639,7 @@ void sig_int(int sig_num)
 	 * 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;
 	}
 


-- 
The rsync repository.



More information about the rsync-cvs mailing list