mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-12 01:56:58 +02:00
MINOR: listener: new function listener_release
Instead of duplicating some sensitive listener-specific code in the session and in the stream code, let's call listener_release() when releasing a connection attached to a listener.
This commit is contained in:
parent
6f5e4b98df
commit
05f5047d40
@ -102,6 +102,12 @@ void delete_listener(struct listener *listener);
|
|||||||
*/
|
*/
|
||||||
void listener_accept(int fd);
|
void listener_accept(int fd);
|
||||||
|
|
||||||
|
/* Notify the listener that a connection initiated from it was released. This
|
||||||
|
* is used to keep the connection count consistent and to possibly re-open
|
||||||
|
* listening when it was limited.
|
||||||
|
*/
|
||||||
|
void listener_release(struct listener *l);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Registers the bind keyword list <kwl> as a list of valid keywords for next
|
* Registers the bind keyword list <kwl> as a list of valid keywords for next
|
||||||
* parsing sessions.
|
* parsing sessions.
|
||||||
|
@ -588,6 +588,29 @@ void listener_accept(int fd)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Notify the listener that a connection initiated from it was released. This
|
||||||
|
* is used to keep the connection count consistent and to possibly re-open
|
||||||
|
* listening when it was limited.
|
||||||
|
*/
|
||||||
|
void listener_release(struct listener *l)
|
||||||
|
{
|
||||||
|
struct proxy *fe = l->bind_conf->frontend;
|
||||||
|
|
||||||
|
if (!(l->options & LI_O_UNLIMITED))
|
||||||
|
actconn--;
|
||||||
|
l->nbconn--;
|
||||||
|
if (l->state == LI_FULL)
|
||||||
|
resume_listener(l);
|
||||||
|
|
||||||
|
/* Dequeues all of the listeners waiting for a resource */
|
||||||
|
if (!LIST_ISEMPTY(&global_listener_queue))
|
||||||
|
dequeue_all_listeners(&global_listener_queue);
|
||||||
|
|
||||||
|
if (!LIST_ISEMPTY(&fe->listener_queue) &&
|
||||||
|
(!fe->fe_sps_lim || freq_ctr_remain(&fe->fe_sess_per_sec, fe->fe_sps_lim, 0) > 0))
|
||||||
|
dequeue_all_listeners(&fe->listener_queue);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Registers the bind keyword list <kwl> as a list of valid keywords for next
|
* Registers the bind keyword list <kwl> as a list of valid keywords for next
|
||||||
* parsing sessions.
|
* parsing sessions.
|
||||||
|
@ -376,20 +376,7 @@ static void session_kill_embryonic(struct session *sess)
|
|||||||
conn_free(conn);
|
conn_free(conn);
|
||||||
|
|
||||||
sess->fe->feconn--;
|
sess->fe->feconn--;
|
||||||
|
listener_release(sess->listener);
|
||||||
if (!(sess->listener->options & LI_O_UNLIMITED))
|
|
||||||
actconn--;
|
|
||||||
sess->listener->nbconn--;
|
|
||||||
if (sess->listener->state == LI_FULL)
|
|
||||||
resume_listener(sess->listener);
|
|
||||||
|
|
||||||
/* Dequeues all of the listeners waiting for a resource */
|
|
||||||
if (!LIST_ISEMPTY(&global_listener_queue))
|
|
||||||
dequeue_all_listeners(&global_listener_queue);
|
|
||||||
|
|
||||||
if (!LIST_ISEMPTY(&sess->fe->listener_queue) &&
|
|
||||||
(!sess->fe->fe_sps_lim || freq_ctr_remain(&sess->fe->fe_sess_per_sec, sess->fe->fe_sps_lim, 0) > 0))
|
|
||||||
dequeue_all_listeners(&sess->fe->listener_queue);
|
|
||||||
|
|
||||||
task_delete(task);
|
task_delete(task);
|
||||||
task_free(task);
|
task_free(task);
|
||||||
|
17
src/stream.c
17
src/stream.c
@ -2421,21 +2421,8 @@ struct task *process_stream(struct task *t)
|
|||||||
if (s->flags & SF_BE_ASSIGNED)
|
if (s->flags & SF_BE_ASSIGNED)
|
||||||
s->be->beconn--;
|
s->be->beconn--;
|
||||||
|
|
||||||
if (sess->listener) {
|
if (sess->listener)
|
||||||
if (!(sess->listener->options & LI_O_UNLIMITED))
|
listener_release(sess->listener);
|
||||||
actconn--;
|
|
||||||
sess->listener->nbconn--;
|
|
||||||
if (sess->listener->state == LI_FULL)
|
|
||||||
resume_listener(sess->listener);
|
|
||||||
|
|
||||||
/* Dequeues all of the listeners waiting for a resource */
|
|
||||||
if (!LIST_ISEMPTY(&global_listener_queue))
|
|
||||||
dequeue_all_listeners(&global_listener_queue);
|
|
||||||
|
|
||||||
if (!LIST_ISEMPTY(&sess->fe->listener_queue) &&
|
|
||||||
(!sess->fe->fe_sps_lim || freq_ctr_remain(&sess->fe->fe_sess_per_sec, sess->fe->fe_sps_lim, 0) > 0))
|
|
||||||
dequeue_all_listeners(&sess->fe->listener_queue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlikely((global.mode & MODE_DEBUG) &&
|
if (unlikely((global.mode & MODE_DEBUG) &&
|
||||||
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
||||||
|
Loading…
Reference in New Issue
Block a user