mirror of https://github.com/omar-polo/gmid.git
improve proxy error path
properly release everything when during client_close if the request was managed by a proxy.
This commit is contained in:
parent
d28bd963c2
commit
e0f6dc646d
1
gmid.h
1
gmid.h
|
@ -240,6 +240,7 @@ struct client {
|
|||
struct proxy *proxy;
|
||||
struct bufferevent *proxybev;
|
||||
struct tls *proxyctx;
|
||||
int proxyevset;
|
||||
struct event proxyev;
|
||||
|
||||
char *header;
|
||||
|
|
2
proxy.c
2
proxy.c
|
@ -288,6 +288,7 @@ proxy_handshake(int fd, short event, void *d)
|
|||
return;
|
||||
}
|
||||
|
||||
c->proxyevset = 0;
|
||||
proxy_enqueue_req(c);
|
||||
}
|
||||
|
||||
|
@ -327,6 +328,7 @@ proxy_setup_tls(struct client *c)
|
|||
if (tls_connect_socket(c->proxyctx, c->pfd, p->host) == -1)
|
||||
goto err;
|
||||
|
||||
c->proxyevset = 1;
|
||||
event_set(&c->proxyev, c->pfd, EV_READ|EV_WRITE, proxy_handshake, c);
|
||||
event_add(&c->proxyev, &handshake_timeout);
|
||||
|
||||
|
|
24
server.c
24
server.c
|
@ -1277,19 +1277,21 @@ client_close(struct client *c)
|
|||
bufferevent_free(c->bev);
|
||||
c->bev = NULL;
|
||||
|
||||
if (c->proxybev != NULL) {
|
||||
if (event_pending(&c->proxyev, EV_READ|EV_WRITE, NULL))
|
||||
event_del(&c->proxyev);
|
||||
|
||||
if (c->pfd != -1 && c->proxyctx != NULL) {
|
||||
/* shut down the proxy TLS connection */
|
||||
client_proxy_close(c->pfd, 0, c->proxyctx);
|
||||
c->pfd = -1;
|
||||
}
|
||||
|
||||
bufferevent_free(c->proxybev);
|
||||
if (c->proxyevset &&
|
||||
event_pending(&c->proxyev, EV_READ|EV_WRITE, NULL)) {
|
||||
c->proxyevset = 0;
|
||||
event_del(&c->proxyev);
|
||||
}
|
||||
|
||||
if (c->pfd != -1 && c->proxyctx != NULL) {
|
||||
/* shut down the proxy TLS connection */
|
||||
client_proxy_close(c->pfd, 0, c->proxyctx);
|
||||
c->pfd = -1;
|
||||
}
|
||||
|
||||
if (c->proxybev != NULL)
|
||||
bufferevent_free(c->proxybev);
|
||||
|
||||
client_close_ev(c->fd, 0, c);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue