Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit b055f07

Browse files
authored
Merge pull request #222 from laijs/event-hanghup
change policy for event hangup
2 parents 256c491 + a615be8 commit b055f07

File tree

2 files changed

+12
-22
lines changed

2 files changed

+12
-22
lines changed

src/event.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,32 +157,23 @@ int hyper_handle_event(int efd, struct epoll_event *event)
157157
fprintf(stdout, "%s get event %d, he %p, fd %d. ops %p\n",
158158
__func__, event->events, he, he->fd, he->ops);
159159

160-
/* do not handle hup event if have in event */
160+
/* do not handle hup event if have in/out event */
161161
if ((event->events & EPOLLIN) && he->ops->read) {
162162
fprintf(stdout, "%s event EPOLLIN, he %p, fd %d, %p\n",
163163
__func__, he, he->fd, he->ops);
164-
if (he->ops->read && he->ops->read(he, efd) < 0)
165-
return -1;
166-
} else if (event->events & EPOLLHUP) {
167-
fprintf(stdout, "%s event EPOLLHUP, he %p, fd %d, %p\n",
168-
__func__, he, he->fd, he->ops);
169-
if (he->ops->hup)
170-
he->ops->hup(he, efd);
171-
return 0;
164+
return he->ops->read(he, efd);
172165
}
173-
174-
if (event->events & EPOLLOUT) {
166+
if ((event->events & EPOLLOUT) && he->ops->write) {
175167
fprintf(stdout, "%s event EPOLLOUT, he %p, fd %d, %p\n",
176168
__func__, he, he->fd, he->ops);
177-
if (he->ops->write && he->ops->write(he, efd) < 0)
178-
return -1;
169+
return he->ops->write(he, efd);
179170
}
180171

181-
if (event->events & EPOLLERR) {
182-
fprintf(stdout, "get epoll err on event: %p\n", he);
172+
if ((event->events & EPOLLHUP) || (event->events & EPOLLERR)) {
173+
fprintf(stdout, "%s event EPOLLHUP or EPOLLERR, he %p, fd %d, %x\n",
174+
__func__, he, he->fd, event->events);
183175
if (he->ops->hup)
184176
he->ops->hup(he, efd);
185-
return 0;
186177
}
187178

188179
return 0;

src/exec.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,9 @@ static int pts_loop(struct hyper_event *de, uint64_t seq, int efd, struct hyper_
115115
continue;
116116

117117
if (errno != EAGAIN && errno != EIO) {
118-
perror("fail to read tty fd");
119-
return -1;
118+
perror("failed to read process's stdout/stderr");
119+
pts_hup(de, efd, exec);
120+
return 0;
120121
}
121122

122123
break;
@@ -152,12 +153,10 @@ static int write_to_stdin(struct hyper_event *de, int efd)
152153
struct hyper_exec *exec = container_of(de, struct hyper_exec, stdinev);
153154
fprintf(stdout, "%s, seq %" PRIu64"\n", __func__, exec->seq);
154155

155-
int ret = hyper_event_write(de, efd);
156-
157-
if (ret >= 0 && de->wbuf.get == 0 && exec->close_stdin_request)
156+
if (hyper_event_write(de, efd) < 0 || (de->wbuf.get == 0 && exec->close_stdin_request))
158157
pts_hup(de, efd, exec);
159158

160-
return ret;
159+
return 0;
161160
}
162161

163162
struct hyper_event_ops in_ops = {

0 commit comments

Comments
 (0)