=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/session.c,v retrieving revision 1.106 retrieving revision 1.107 diff -u -r1.106 -r1.107 --- src/usr.bin/ssh/session.c 2001/10/09 21:59:41 1.106 +++ src/usr.bin/ssh/session.c 2001/10/10 22:18:47 1.107 @@ -33,7 +33,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: session.c,v 1.106 2001/10/09 21:59:41 markus Exp $"); +RCSID("$OpenBSD: session.c,v 1.107 2001/10/10 22:18:47 markus Exp $"); #include "ssh.h" #include "ssh1.h" @@ -1576,36 +1576,29 @@ { Session *s = session_by_channel(id); if (s == NULL) { - debug("session_close_by_channel: no session for channel %d", id); + debug("session_close_by_channel: no session for id %d", id); return; } - /* disconnect channel */ - channel_cancel_cleanup(s->chanid); - s->chanid = -1; - - debug("session_close_by_channel: channel %d kill %d", id, s->pid); + debug("session_close_by_channel: channel %d child %d", id, s->pid); if (s->pid != 0) { - /* notify child */ - if (kill(s->pid, SIGHUP) < 0) - error("session_close_by_channel: kill %d: %s", - s->pid, strerror(errno)); + /* delay detach */ + debug("session_close_by_channel: channel %d: has child", id); + return; } + /* detach by removing callback */ + channel_cancel_cleanup(s->chanid); + s->chanid = -1; session_close(s); } void -session_close_all(void) +session_destroy_all(void) { int i; for(i = 0; i < MAX_SESSIONS; i++) { Session *s = &sessions[i]; - if (s->used) { - if (s->chanid != -1) { - channel_cancel_cleanup(s->chanid); - s->chanid = -1; - } + if (s->used) session_close(s); - } } }