mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-01-04 05:49:35 -05:00
- Fix for #558: fix loop in comm_point->tcp_free when a comm_point is reclaimed
more than once during callbacks.
This commit is contained in:
parent
e7fbd27060
commit
431b749d7a
2 changed files with 16 additions and 6 deletions
|
|
@ -1,3 +1,7 @@
|
|||
5 November 2021: George
|
||||
- Fix for #558: fix loop in comm_point->tcp_free when a comm_point is
|
||||
reclaimed more than once during callbacks.
|
||||
|
||||
5 November 2021: Wouter
|
||||
- Fix that forward-zone name is documented as the full name of the
|
||||
zone. It is not relative but a fully qualified domain name.
|
||||
|
|
|
|||
|
|
@ -1054,6 +1054,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
|||
/* clear leftover flags from previous use, and then set the
|
||||
* correct event base for the event structure for libevent */
|
||||
ub_event_free(c_hdl->ev->ev);
|
||||
c_hdl->ev->ev = NULL;
|
||||
if((c_hdl->type == comm_tcp && c_hdl->tcp_req_info) ||
|
||||
c_hdl->type == comm_local || c_hdl->type == comm_raw)
|
||||
c_hdl->tcp_do_toggle_rw = 0;
|
||||
|
|
@ -1110,6 +1111,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
|||
/* grab the tcp handler buffers */
|
||||
c->cur_tcp_count++;
|
||||
c->tcp_free = c_hdl->tcp_free;
|
||||
c_hdl->tcp_free = NULL;
|
||||
if(!c->tcp_free) {
|
||||
/* stop accepting incoming queries for now. */
|
||||
comm_point_stop_listening(c);
|
||||
|
|
@ -1131,9 +1133,11 @@ reclaim_tcp_handler(struct comm_point* c)
|
|||
}
|
||||
comm_point_close(c);
|
||||
if(c->tcp_parent) {
|
||||
c->tcp_parent->cur_tcp_count--;
|
||||
c->tcp_free = c->tcp_parent->tcp_free;
|
||||
c->tcp_parent->tcp_free = c;
|
||||
if(c != c->tcp_parent->tcp_free) {
|
||||
c->tcp_parent->cur_tcp_count--;
|
||||
c->tcp_free = c->tcp_parent->tcp_free;
|
||||
c->tcp_parent->tcp_free = c;
|
||||
}
|
||||
if(!c->tcp_free) {
|
||||
/* re-enable listening on accept socket */
|
||||
comm_point_start_listening(c->tcp_parent, -1, -1);
|
||||
|
|
@ -2228,9 +2232,11 @@ reclaim_http_handler(struct comm_point* c)
|
|||
}
|
||||
comm_point_close(c);
|
||||
if(c->tcp_parent) {
|
||||
c->tcp_parent->cur_tcp_count--;
|
||||
c->tcp_free = c->tcp_parent->tcp_free;
|
||||
c->tcp_parent->tcp_free = c;
|
||||
if(c != c->tcp_parent->tcp_free) {
|
||||
c->tcp_parent->cur_tcp_count--;
|
||||
c->tcp_free = c->tcp_parent->tcp_free;
|
||||
c->tcp_parent->tcp_free = c;
|
||||
}
|
||||
if(!c->tcp_free) {
|
||||
/* re-enable listening on accept socket */
|
||||
comm_point_start_listening(c->tcp_parent, -1, -1);
|
||||
|
|
|
|||
Loading…
Reference in a new issue