mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-31 10:31:46 +00:00
MEDIUM: session: update the session's stick counters upon session_free()
Whenever session_free() is called, any possible stick counter stored in the session will be synchronized.
This commit is contained in:
parent
8b7f8688ee
commit
bb2ef12a60
@ -30,10 +30,37 @@
|
||||
#include <types/global.h>
|
||||
#include <types/session.h>
|
||||
|
||||
#include <proto/stick_table.h>
|
||||
|
||||
extern struct pool_head *pool2_session;
|
||||
void session_free(struct session *sess);
|
||||
int init_session();
|
||||
|
||||
/* Remove the refcount from the session to the tracked counters, and clear the
|
||||
* pointer to ensure this is only performed once. The caller is responsible for
|
||||
* ensuring that the pointer is valid first.
|
||||
*/
|
||||
static inline void session_store_counters(struct session *sess)
|
||||
{
|
||||
void *ptr;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_SESS_STKCTR; i++) {
|
||||
struct stkctr *stkctr = &sess->stkctr[i];
|
||||
|
||||
if (!stkctr_entry(stkctr))
|
||||
continue;
|
||||
|
||||
ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_CONN_CUR);
|
||||
if (ptr)
|
||||
stktable_data_cast(ptr, conn_cur)--;
|
||||
stkctr_entry(stkctr)->ref_cnt--;
|
||||
stksess_kill_if_expired(stkctr->table, stkctr_entry(stkctr));
|
||||
stkctr_set_entry(stkctr, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif /* _PROTO_SESSION_H */
|
||||
|
||||
/*
|
||||
|
@ -18,10 +18,13 @@
|
||||
#include <types/global.h>
|
||||
#include <types/session.h>
|
||||
|
||||
#include <proto/session.h>
|
||||
|
||||
struct pool_head *pool2_session;
|
||||
|
||||
void session_free(struct session *sess)
|
||||
{
|
||||
session_store_counters(sess);
|
||||
pool_free2(pool2_session, sess);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user