mirror of
https://github.com/darkk/redsocks.git
synced 2025-08-25 19:25:30 +00:00
Avoid EBADF warnings from epoll using bufferevent_free more accurately
This commit is contained in:
parent
5c716327b2
commit
4e222f3f27
@ -132,8 +132,7 @@ static void httpc_read_cb(struct bufferevent *buffev, void *_arg)
|
||||
}
|
||||
|
||||
/* close relay tunnel */
|
||||
redsocks_close(EVENT_FD(&client->relay->ev_write));
|
||||
bufferevent_free(client->relay);
|
||||
redsocks_bufferevent_free(client->relay);
|
||||
|
||||
/* set to initial state*/
|
||||
client->state = httpc_new;
|
||||
|
@ -205,8 +205,7 @@ static void httpr_relay_read_cb(struct bufferevent *buffev, void *_arg)
|
||||
}
|
||||
|
||||
/* close relay tunnel */
|
||||
redsocks_close(EVENT_FD(&client->relay->ev_write));
|
||||
bufferevent_free(client->relay);
|
||||
redsocks_bufferevent_free(client->relay);
|
||||
|
||||
/* set to initial state*/
|
||||
client->state = httpr_recv_request_headers;
|
||||
|
20
redsocks.c
20
redsocks.c
@ -352,15 +352,11 @@ void redsocks_drop_client(redsocks_client *client)
|
||||
if (client->instance->relay_ss->fini)
|
||||
client->instance->relay_ss->fini(client);
|
||||
|
||||
if (client->client) {
|
||||
redsocks_close(EVENT_FD(&client->client->ev_write));
|
||||
bufferevent_free(client->client);
|
||||
}
|
||||
if (client->client)
|
||||
redsocks_bufferevent_free(client->client);
|
||||
|
||||
if (client->relay) {
|
||||
redsocks_close(EVENT_FD(&client->relay->ev_write));
|
||||
bufferevent_free(client->relay);
|
||||
}
|
||||
if (client->relay)
|
||||
redsocks_bufferevent_free(client->relay);
|
||||
|
||||
list_del(&client->list);
|
||||
free(client);
|
||||
@ -634,6 +630,14 @@ void redsocks_close_internal(int fd, const char* file, int line, const char *fun
|
||||
}
|
||||
}
|
||||
|
||||
void redsocks_bufferevent_free(struct bufferevent *buffev)
|
||||
{
|
||||
int fd = bufferevent_getfd(buffev);
|
||||
bufferevent_setfd(buffev, -1); // to avoid EBADFD warnings from epoll
|
||||
bufferevent_free(buffev);
|
||||
redsocks_close(fd);
|
||||
}
|
||||
|
||||
static void redsocks_accept_client(int fd, short what, void *_arg)
|
||||
{
|
||||
redsocks_instance *self = _arg;
|
||||
|
@ -94,6 +94,9 @@ int redsocks_write_helper(
|
||||
#define redsocks_close(fd) redsocks_close_internal((fd), __FILE__, __LINE__, __func__)
|
||||
void redsocks_close_internal(int fd, const char* file, int line, const char *func);
|
||||
|
||||
// I have to account descriptiors for accept-backoff, that's why BEV_OPT_CLOSE_ON_FREE is not used.
|
||||
void redsocks_bufferevent_free(struct bufferevent *buffev);
|
||||
|
||||
#define redsocks_log_error(client, prio, msg...) \
|
||||
redsocks_log_write_plain(__FILE__, __LINE__, __func__, 0, &(client)->clientaddr, &(client)->destaddr, prio, ## msg)
|
||||
#define redsocks_log_errno(client, prio, msg...) \
|
||||
|
11
redudp.c
11
redudp.c
@ -214,21 +214,16 @@ static struct evbuffer* socks5_mkassociate(void *p)
|
||||
*/
|
||||
static void redudp_drop_client(redudp_client *client)
|
||||
{
|
||||
int fd;
|
||||
redudp_log_error(client, LOG_INFO, "Dropping...");
|
||||
enqueued_packet *q, *tmp;
|
||||
if (event_initialized(&client->timeout)) {
|
||||
if (event_del(&client->timeout) == -1)
|
||||
redudp_log_errno(client, LOG_ERR, "event_del");
|
||||
}
|
||||
if (client->relay) {
|
||||
fd = EVENT_FD(&client->relay->ev_read);
|
||||
bufferevent_free(client->relay);
|
||||
shutdown(fd, SHUT_RDWR);
|
||||
redsocks_close(fd);
|
||||
}
|
||||
if (client->relay)
|
||||
redsocks_bufferevent_free(client->relay);
|
||||
if (event_initialized(&client->udprelay)) {
|
||||
fd = EVENT_FD(&client->udprelay);
|
||||
int fd = EVENT_FD(&client->udprelay);
|
||||
if (event_del(&client->udprelay) == -1)
|
||||
redudp_log_errno(client, LOG_ERR, "event_del");
|
||||
redsocks_close(fd);
|
||||
|
4
utils.c
4
utils.c
@ -149,6 +149,8 @@ struct bufferevent* red_connect_relay(struct sockaddr_in *addr, evbuffercb write
|
||||
goto fail;
|
||||
}
|
||||
|
||||
relay_fd = -1;
|
||||
|
||||
error = bufferevent_enable(retval, EV_WRITE); // we wait for connection...
|
||||
if (error) {
|
||||
log_errno(LOG_ERR, "bufferevent_enable");
|
||||
@ -161,7 +163,7 @@ fail:
|
||||
if (relay_fd != -1)
|
||||
redsocks_close(relay_fd);
|
||||
if (retval)
|
||||
bufferevent_free(retval);
|
||||
redsocks_bufferevent_free(retval);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user