version 1.106, 2001/10/09 21:59:41 |
version 1.107, 2001/10/10 22:18:47 |
|
|
{ |
{ |
Session *s = session_by_channel(id); |
Session *s = session_by_channel(id); |
if (s == NULL) { |
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; |
return; |
} |
} |
/* disconnect channel */ |
debug("session_close_by_channel: channel %d child %d", id, s->pid); |
channel_cancel_cleanup(s->chanid); |
|
s->chanid = -1; |
|
|
|
debug("session_close_by_channel: channel %d kill %d", id, s->pid); |
|
if (s->pid != 0) { |
if (s->pid != 0) { |
/* notify child */ |
/* delay detach */ |
if (kill(s->pid, SIGHUP) < 0) |
debug("session_close_by_channel: channel %d: has child", id); |
error("session_close_by_channel: kill %d: %s", |
return; |
s->pid, strerror(errno)); |
|
} |
} |
|
/* detach by removing callback */ |
|
channel_cancel_cleanup(s->chanid); |
|
s->chanid = -1; |
session_close(s); |
session_close(s); |
} |
} |
|
|
void |
void |
session_close_all(void) |
session_destroy_all(void) |
{ |
{ |
int i; |
int i; |
for(i = 0; i < MAX_SESSIONS; i++) { |
for(i = 0; i < MAX_SESSIONS; i++) { |
Session *s = &sessions[i]; |
Session *s = &sessions[i]; |
if (s->used) { |
if (s->used) |
if (s->chanid != -1) { |
|
channel_cancel_cleanup(s->chanid); |
|
s->chanid = -1; |
|
} |
|
session_close(s); |
session_close(s); |
} |
|
} |
} |
} |
} |
|
|