version 1.12, 2009/11/04 20:50:11 |
version 1.13, 2009/11/04 21:47:42 |
|
|
close(c->ibuf.fd); |
close(c->ibuf.fd); |
imsg_clear(&c->ibuf); |
imsg_clear(&c->ibuf); |
event_del(&c->event); |
event_del(&c->event); |
event_del(&c->tty.event); |
|
|
|
for (i = 0; i < ARRAY_LENGTH(&dead_clients); i++) { |
for (i = 0; i < ARRAY_LENGTH(&dead_clients); i++) { |
if (ARRAY_ITEM(&dead_clients, i) == NULL) { |
if (ARRAY_ITEM(&dead_clients, i) == NULL) { |
ARRAY_SET(&dead_clients, i, c); |
ARRAY_SET(&dead_clients, i, c); |
|
|
event_set(&c->event, |
event_set(&c->event, |
c->ibuf.fd, events, server_client_callback, c); |
c->ibuf.fd, events, server_client_callback, c); |
event_add(&c->event, NULL); |
event_add(&c->event, NULL); |
|
|
if (c->tty.fd == -1) |
|
continue; |
|
if (c->flags & CLIENT_SUSPENDED || c->session == NULL) |
|
continue; |
|
events = EV_READ; |
|
if (BUFFER_USED(c->tty.out) > 0) |
|
events |= EV_WRITE; |
|
event_del(&c->tty.event); |
|
event_set(&c->tty.event, |
|
c->tty.fd, events, server_client_callback, c); |
|
event_add(&c->tty.event, NULL); |
|
} |
} |
} |
} |
|
|
|
|
} |
} |
|
|
if (events & EV_READ && server_client_msg_dispatch(c) != 0) |
if (events & EV_READ && server_client_msg_dispatch(c) != 0) |
goto client_lost; |
|
} |
|
|
|
if (c->tty.fd != -1 && fd == c->tty.fd) { |
|
if (c->flags & CLIENT_SUSPENDED || c->session == NULL) |
|
return; |
|
|
|
if (buffer_poll(fd, events, c->tty.in, c->tty.out) != 0) |
|
goto client_lost; |
goto client_lost; |
} |
} |
|
|