Skip to content

Commit 04a769b

Browse files
rainingmasterxiaocang
authored andcommitted
fix: for ssl test cases
1 parent 1cdd658 commit 04a769b

File tree

6 files changed

+159
-102
lines changed

6 files changed

+159
-102
lines changed

src/event/ngx_http_lua_epoll.c

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,29 +47,43 @@ ngx_http_lua_epoll_init_event(ngx_cycle_t *cycle)
4747
static ngx_int_t
4848
ngx_http_lua_epoll_set_event(ngx_event_t *ev, ngx_int_t event)
4949
{
50-
uint32_t events;
50+
int op;
51+
uint32_t events, prev;
5152
ngx_connection_t *c;
53+
ngx_event_t *e;
5254
struct epoll_event ee;
5355

5456
c = ev->data;
5557

5658
events = (uint32_t) event;
5759

5860
if (event == NGX_READ_EVENT) {
61+
e = c->write;
62+
prev = EPOLLOUT;
5963
#if (NGX_READ_EVENT != EPOLLIN|EPOLLRDHUP)
6064
events = EPOLLIN|EPOLLRDHUP;
6165
#endif
6266

6367
} else {
68+
e = c->read;
69+
prev = EPOLLIN|EPOLLRDHUP;
6470
#if (NGX_WRITE_EVENT != EPOLLOUT)
6571
events = EPOLLOUT;
6672
#endif
6773
}
6874

75+
if (e->active) {
76+
op = EPOLL_CTL_MOD;
77+
events |= prev;
78+
79+
} else {
80+
op = EPOLL_CTL_ADD;
81+
}
82+
6983
ee.events = events;
7084
ee.data.ptr = c;
7185

72-
if (epoll_ctl(ep, EPOLL_CTL_ADD, c->fd, &ee) == -1) {
86+
if (epoll_ctl(ep, op, c->fd, &ee) == -1) {
7387
ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
7488
"lua epoll_ctl(EPOLL_CTL_ADD, %d) failed, add event: %d",
7589
c->fd, events);
@@ -86,15 +100,35 @@ ngx_http_lua_epoll_set_event(ngx_event_t *ev, ngx_int_t event)
86100
static ngx_int_t
87101
ngx_http_lua_epoll_clear_event(ngx_event_t *ev, ngx_int_t event)
88102
{
103+
ngx_event_t *e;
89104
ngx_connection_t *c;
105+
int op;
106+
uint32_t prev;
90107
struct epoll_event ee;
91108

92109
c = ev->data;
93110

94-
ee.events = 0;
95-
ee.data.ptr = NULL;
111+
if (event == NGX_READ_EVENT) {
112+
e = c->write;
113+
prev = EPOLLOUT;
114+
115+
} else {
116+
e = c->read;
117+
prev = EPOLLIN|EPOLLRDHUP;
118+
}
119+
120+
if (e->active) {
121+
op = EPOLL_CTL_MOD;
122+
ee.events = prev;
123+
ee.data.ptr = c;
124+
125+
} else {
126+
op = EPOLL_CTL_DEL;
127+
ee.events = 0;
128+
ee.data.ptr = NULL;
129+
}
96130

97-
if (epoll_ctl(ep, EPOLL_CTL_DEL, c->fd, &ee) == -1) {
131+
if (epoll_ctl(ep, op, c->fd, &ee) == -1) {
98132
ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
99133
"lua epoll_ctl(EPOLL_CTL_DEL, %d) failed", c->fd);
100134

src/event/ngx_http_lua_kqueue.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ static ngx_int_t ngx_http_lua_kqueue_process_event(ngx_http_request_t *r,
1919
ngx_msec_t timer);
2020

2121
int kq = -1;
22-
static struct kevent kch;
22+
static struct kevent kch[2];
2323
static struct kevent kev;
24+
static ngx_uint_t nchanges;
2425

2526
ngx_http_lua_event_actions_t ngx_http_lua_kqueue = {
2627
ngx_http_lua_kqueue_init_event,
@@ -33,6 +34,7 @@ ngx_http_lua_event_actions_t ngx_http_lua_kqueue = {
3334
static ngx_int_t
3435
ngx_http_lua_kqueue_init_event(ngx_cycle_t *cycle)
3536
{
37+
nchanges = 0;
3638
kq = kqueue();
3739

3840
if (kq == -1) {
@@ -55,10 +57,12 @@ ngx_http_lua_kqueue_set_event(ngx_event_t *ev, ngx_int_t event)
5557

5658
ev->active = 1;
5759

58-
kch.ident = c->fd;
59-
kch.filter = (short) event;
60-
kch.flags = EV_ADD|EV_ENABLE;
61-
kch.udata = NGX_KQUEUE_UDATA_T (ev);
60+
kch[nchanges].ident = c->fd;
61+
kch[nchanges].filter = (short) event;
62+
kch[nchanges].flags = EV_ADD|EV_ENABLE;
63+
kch[nchanges].udata = NGX_KQUEUE_UDATA_T (ev);
64+
65+
nchanges++;
6266

6367
return NGX_OK;
6468
}
@@ -73,13 +77,13 @@ ngx_http_lua_kqueue_clear_event(ngx_event_t *ev, ngx_int_t event)
7377

7478
ev->active = 0;
7579

76-
kch.ident = c->fd;
77-
kch.filter = (short) event;
78-
kch.flags = EV_DELETE;
79-
kch.udata = NGX_KQUEUE_UDATA_T (ev);
80+
kch[0].ident = c->fd;
81+
kch[0].filter = (short) event;
82+
kch[0].flags = EV_DELETE;
83+
kch[0].udata = NGX_KQUEUE_UDATA_T (ev);
8084

81-
if (kevent(kq, &kch, 1, NULL, 0, NULL) == -1) {
82-
ngx_log_error(NGX_LOG_ALERT, r->connection->log, err,
85+
if (kevent(kq, kch, 1, NULL, 0, NULL) == -1) {
86+
ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
8387
"lua kevent() failed");
8488

8589
return NGX_ERROR;
@@ -100,8 +104,9 @@ ngx_http_lua_kqueue_process_event(ngx_http_request_t *r, ngx_msec_t timer)
100104
ts.tv_sec = timer / 1000;
101105
ts.tv_nsec = (timer % 1000) * 1000000;
102106

103-
events = kevent(kq, &kch, 1, &kev, 1, &ts);
107+
events = kevent(kq, kch, nchanges, &kev, 1, &ts);
104108

109+
nchanges = 0;
105110
err = (events == -1) ? ngx_errno : 0;
106111

107112
if (err) {
@@ -125,6 +130,9 @@ ngx_http_lua_kqueue_process_event(ngx_http_request_t *r, ngx_msec_t timer)
125130

126131
if (kev.flags & EV_EOF) {
127132
ev->pending_eof = 1;
133+
134+
ngx_log_error(NGX_LOG_ALERT, r->connection->log, kev.fflags,
135+
"lua kevent() reported that connect() failed");
128136
}
129137

130138
return NGX_OK;

src/event/ngx_http_lua_poll.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,14 @@ ngx_http_lua_poll_set_event(ngx_event_t *ev, ngx_int_t event)
5454
#endif
5555
}
5656

57-
pev.fd = c->fd;
58-
pev.events = (short) event;
59-
pev.revents = 0;
57+
if (pev.fd != c->fd) {
58+
pev.fd = c->fd;
59+
pev.events = (short) event;
60+
pev.revents = 0;
61+
62+
} else {
63+
pev.events |= (short) event;
64+
}
6065

6166
return NGX_OK;
6267
}
@@ -65,6 +70,8 @@ ngx_http_lua_poll_set_event(ngx_event_t *ev, ngx_int_t event)
6570
static ngx_int_t
6671
ngx_http_lua_poll_clear_event(ngx_event_t *ev, ngx_int_t event)
6772
{
73+
ev->active = 0;
74+
6875
return NGX_OK;
6976
}
7077

0 commit comments

Comments
 (0)