*/
void _exit_cleanup(int code, const char *file, int line)
{
+ int ocode = code;
extern int keep_partial;
extern int log_got_error;
signal(SIGUSR1, SIG_IGN);
signal(SIGUSR2, SIG_IGN);
+ if (verbose > 3)
+ rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): entered\n",
+ code, file, line);
+
if (cleanup_child_pid != -1) {
int status;
if (waitpid(cleanup_child_pid, &status, WNOHANG) == cleanup_child_pid) {
if (code) log_exit(code, file, line);
+ if (verbose > 2)
+ rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): about to call exit(%d)\n",
+ ocode, file, line, code);
+
exit(code);
}
extern int remote_version;
extern int am_sender;
extern char *shell_cmd;
+ extern int list_only;
extern int kludge_around_eof;
extern char *bind_address;
extern int default_af_hint;
/* Old servers may just drop the connection here,
rather than sending a proper EXIT command. Yuck. */
- kludge_around_eof = remote_version < 25;
+ kludge_around_eof = list_only && (remote_version < 25);
while (1) {
if (!read_line(fd, line, sizeof(line)-1)) {
ret = start_client(argc, argv);
if (ret == -1)
- exit_cleanup(RERR_STARTCLIENT);
+ exit_cleanup(RERR_STARTCLIENT);
else
- exit_cleanup(ret);
- return ret;
+ exit_cleanup(ret);
+
+ exit(ret);
+ /* NOTREACHED */
}