diff options
Diffstat (limited to 'session.c')
-rw-r--r-- | session.c | 29 |
1 files changed, 11 insertions, 18 deletions
@@ -33,7 +33,7 @@ | |||
33 | */ | 33 | */ |
34 | 34 | ||
35 | #include "includes.h" | 35 | #include "includes.h" |
36 | RCSID("$OpenBSD: session.c,v 1.106 2001/10/09 21:59:41 markus Exp $"); | 36 | RCSID("$OpenBSD: session.c,v 1.107 2001/10/10 22:18:47 markus Exp $"); |
37 | 37 | ||
38 | #include "ssh.h" | 38 | #include "ssh.h" |
39 | #include "ssh1.h" | 39 | #include "ssh1.h" |
@@ -1958,36 +1958,29 @@ session_close_by_channel(int id, void *arg) | |||
1958 | { | 1958 | { |
1959 | Session *s = session_by_channel(id); | 1959 | Session *s = session_by_channel(id); |
1960 | if (s == NULL) { | 1960 | if (s == NULL) { |
1961 | debug("session_close_by_channel: no session for channel %d", id); | 1961 | debug("session_close_by_channel: no session for id %d", id); |
1962 | return; | 1962 | return; |
1963 | } | 1963 | } |
1964 | /* disconnect channel */ | 1964 | debug("session_close_by_channel: channel %d child %d", id, s->pid); |
1965 | channel_cancel_cleanup(s->chanid); | ||
1966 | s->chanid = -1; | ||
1967 | |||
1968 | debug("session_close_by_channel: channel %d kill %d", id, s->pid); | ||
1969 | if (s->pid != 0) { | 1965 | if (s->pid != 0) { |
1970 | /* notify child */ | 1966 | /* delay detach */ |
1971 | if (kill(s->pid, SIGHUP) < 0) | 1967 | debug("session_close_by_channel: channel %d: has child", id); |
1972 | error("session_close_by_channel: kill %d: %s", | 1968 | return; |
1973 | s->pid, strerror(errno)); | ||
1974 | } | 1969 | } |
1970 | /* detach by removing callback */ | ||
1971 | channel_cancel_cleanup(s->chanid); | ||
1972 | s->chanid = -1; | ||
1975 | session_close(s); | 1973 | session_close(s); |
1976 | } | 1974 | } |
1977 | 1975 | ||
1978 | void | 1976 | void |
1979 | session_close_all(void) | 1977 | session_destroy_all(void) |
1980 | { | 1978 | { |
1981 | int i; | 1979 | int i; |
1982 | for(i = 0; i < MAX_SESSIONS; i++) { | 1980 | for(i = 0; i < MAX_SESSIONS; i++) { |
1983 | Session *s = &sessions[i]; | 1981 | Session *s = &sessions[i]; |
1984 | if (s->used) { | 1982 | if (s->used) |
1985 | if (s->chanid != -1) { | ||
1986 | channel_cancel_cleanup(s->chanid); | ||
1987 | s->chanid = -1; | ||
1988 | } | ||
1989 | session_close(s); | 1983 | session_close(s); |
1990 | } | ||
1991 | } | 1984 | } |
1992 | } | 1985 | } |
1993 | 1986 | ||