- (djm) Fix SSH2 not terminating until all background tasks done problem.
This commit is contained in:
parent
ecf5830e8a
commit
15e7d4b64c
|
@ -1,3 +1,6 @@
|
||||||
|
20000929
|
||||||
|
- (djm) Fix SSH2 not terminating until all background tasks done problem.
|
||||||
|
|
||||||
20000926
|
20000926
|
||||||
- (djm) Update X11-askpass to 1.0.2 in RPM spec file
|
- (djm) Update X11-askpass to 1.0.2 in RPM spec file
|
||||||
- (djm) Define _REENTRANT to pickup strtok_r() on HP/UX
|
- (djm) Define _REENTRANT to pickup strtok_r() on HP/UX
|
||||||
|
|
|
@ -110,7 +110,6 @@ sigchld_handler2(int sig)
|
||||||
int save_errno = errno;
|
int save_errno = errno;
|
||||||
debug("Received SIGCHLD.");
|
debug("Received SIGCHLD.");
|
||||||
child_terminated = 1;
|
child_terminated = 1;
|
||||||
child_has_selected = 0;
|
|
||||||
errno = save_errno;
|
errno = save_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,10 +674,10 @@ server_loop2(void)
|
||||||
session_close_by_pid(pid, status);
|
session_close_by_pid(pid, status);
|
||||||
child_terminated = 0;
|
child_terminated = 0;
|
||||||
signal(SIGCHLD, sigchld_handler2);
|
signal(SIGCHLD, sigchld_handler2);
|
||||||
|
if (used_sessions() == 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
channel_after_select(&readset, &writeset);
|
channel_after_select(&readset, &writeset);
|
||||||
if (child_terminated && child_has_selected)
|
|
||||||
break;
|
|
||||||
process_input(&readset);
|
process_input(&readset);
|
||||||
process_output(&writeset);
|
process_output(&writeset);
|
||||||
}
|
}
|
||||||
|
|
12
session.c
12
session.c
|
@ -150,6 +150,8 @@ char *original_command = NULL;
|
||||||
/* data */
|
/* data */
|
||||||
#define MAX_SESSIONS 10
|
#define MAX_SESSIONS 10
|
||||||
Session sessions[MAX_SESSIONS];
|
Session sessions[MAX_SESSIONS];
|
||||||
|
static int num_used_sessions;
|
||||||
|
|
||||||
#ifdef WITH_AIXAUTHENTICATE
|
#ifdef WITH_AIXAUTHENTICATE
|
||||||
/* AIX's lastlogin message, set in auth1.c */
|
/* AIX's lastlogin message, set in auth1.c */
|
||||||
char *aixloginmsg;
|
char *aixloginmsg;
|
||||||
|
@ -1422,6 +1424,7 @@ session_new(void)
|
||||||
sessions[i].used = 0;
|
sessions[i].used = 0;
|
||||||
sessions[i].self = i;
|
sessions[i].self = i;
|
||||||
}
|
}
|
||||||
|
num_used_sessions = 0;
|
||||||
did_init = 1;
|
did_init = 1;
|
||||||
}
|
}
|
||||||
for(i = 0; i < MAX_SESSIONS; i++) {
|
for(i = 0; i < MAX_SESSIONS; i++) {
|
||||||
|
@ -1440,7 +1443,8 @@ session_new(void)
|
||||||
s->auth_proto = NULL;
|
s->auth_proto = NULL;
|
||||||
s->used = 1;
|
s->used = 1;
|
||||||
s->pw = NULL;
|
s->pw = NULL;
|
||||||
debug("session_new: session %d", i);
|
num_used_sessions++;
|
||||||
|
debug("session_new: session %d (%d used)", i, num_used_sessions);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1853,6 +1857,7 @@ session_close(Session *s)
|
||||||
session_pty_cleanup(s);
|
session_pty_cleanup(s);
|
||||||
session_free(s);
|
session_free(s);
|
||||||
session_proctitle(s);
|
session_proctitle(s);
|
||||||
|
num_used_sessions--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1898,6 +1903,11 @@ session_close_by_channel(int id, void *arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int used_sessions(void)
|
||||||
|
{
|
||||||
|
return(num_used_sessions);
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
session_tty_list(void)
|
session_tty_list(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,5 +33,6 @@ int session_open(int id);
|
||||||
void session_input_channel_req(int id, void *arg);
|
void session_input_channel_req(int id, void *arg);
|
||||||
void session_close_by_pid(pid_t pid, int status);
|
void session_close_by_pid(pid_t pid, int status);
|
||||||
void session_close_by_channel(int id, void *arg);
|
void session_close_by_channel(int id, void *arg);
|
||||||
|
int used_sessions(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue