mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +02:00
[MINOR] maintain a global session list in order to ease debugging
Now the global variable 'sessions' will be a dual-linked list of all known sessions. The list element is set at the beginning of the session so that it's easier to follow them all with gdb.
This commit is contained in:
parent
0a5d5ddeb9
commit
f54f8bdd8d
@ -27,6 +27,7 @@
|
|||||||
#include <types/session.h>
|
#include <types/session.h>
|
||||||
|
|
||||||
extern struct pool_head *pool2_session;
|
extern struct pool_head *pool2_session;
|
||||||
|
extern struct list sessions;
|
||||||
|
|
||||||
void session_free(struct session *s);
|
void session_free(struct session *s);
|
||||||
|
|
||||||
|
@ -152,6 +152,7 @@ enum {
|
|||||||
* server should eventually be released.
|
* server should eventually be released.
|
||||||
*/
|
*/
|
||||||
struct session {
|
struct session {
|
||||||
|
struct list list; /* position in global sessions list */
|
||||||
struct task *task; /* the task associated with this session */
|
struct task *task; /* the task associated with this session */
|
||||||
/* application specific below */
|
/* application specific below */
|
||||||
struct proxy *fe; /* the proxy this session depends on for the client side */
|
struct proxy *fe; /* the proxy this session depends on for the client side */
|
||||||
|
@ -106,6 +106,8 @@ int event_accept(int fd) {
|
|||||||
goto out_close;
|
goto out_close;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LIST_ADDQ(&sessions, &s->list);
|
||||||
|
|
||||||
s->flags = 0;
|
s->flags = 0;
|
||||||
s->term_trace = 0;
|
s->term_trace = 0;
|
||||||
|
|
||||||
@ -455,6 +457,7 @@ int event_accept(int fd) {
|
|||||||
out_free_task:
|
out_free_task:
|
||||||
pool_free2(pool2_task, t);
|
pool_free2(pool2_task, t);
|
||||||
out_free_session:
|
out_free_session:
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
out_close:
|
out_close:
|
||||||
close(cfd);
|
close(cfd);
|
||||||
|
@ -411,12 +411,15 @@ int uxst_event_accept(int fd) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LIST_ADDQ(&sessions, &s->list);
|
||||||
|
|
||||||
s->flags = 0;
|
s->flags = 0;
|
||||||
s->term_trace = 0;
|
s->term_trace = 0;
|
||||||
|
|
||||||
if ((t = pool_alloc2(pool2_task)) == NULL) {
|
if ((t = pool_alloc2(pool2_task)) == NULL) {
|
||||||
Alert("out of memory in uxst_event_accept().\n");
|
Alert("out of memory in uxst_event_accept().\n");
|
||||||
close(cfd);
|
close(cfd);
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -428,6 +431,7 @@ int uxst_event_accept(int fd) {
|
|||||||
Alert("accept(): not enough free sockets. Raise -n argument. Giving up.\n");
|
Alert("accept(): not enough free sockets. Raise -n argument. Giving up.\n");
|
||||||
close(cfd);
|
close(cfd);
|
||||||
pool_free2(pool2_task, t);
|
pool_free2(pool2_task, t);
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -436,6 +440,7 @@ int uxst_event_accept(int fd) {
|
|||||||
Alert("accept(): cannot set the socket in non blocking mode. Giving up\n");
|
Alert("accept(): cannot set the socket in non blocking mode. Giving up\n");
|
||||||
close(cfd);
|
close(cfd);
|
||||||
pool_free2(pool2_task, t);
|
pool_free2(pool2_task, t);
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -467,6 +472,7 @@ int uxst_event_accept(int fd) {
|
|||||||
if ((s->req = pool_alloc2(pool2_buffer)) == NULL) { /* no memory */
|
if ((s->req = pool_alloc2(pool2_buffer)) == NULL) { /* no memory */
|
||||||
close(cfd); /* nothing can be done for this fd without memory */
|
close(cfd); /* nothing can be done for this fd without memory */
|
||||||
pool_free2(pool2_task, t);
|
pool_free2(pool2_task, t);
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -475,6 +481,7 @@ int uxst_event_accept(int fd) {
|
|||||||
pool_free2(pool2_buffer, s->req);
|
pool_free2(pool2_buffer, s->req);
|
||||||
close(cfd); /* nothing can be done for this fd without memory */
|
close(cfd); /* nothing can be done for this fd without memory */
|
||||||
pool_free2(pool2_task, t);
|
pool_free2(pool2_task, t);
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
|
|
||||||
struct pool_head *pool2_session;
|
struct pool_head *pool2_session;
|
||||||
|
struct list sessions;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* frees the context associated to a session. It must have been removed first.
|
* frees the context associated to a session. It must have been removed first.
|
||||||
@ -74,6 +75,7 @@ void session_free(struct session *s)
|
|||||||
pool_free2(pool2_requri, txn->uri);
|
pool_free2(pool2_requri, txn->uri);
|
||||||
pool_free2(pool2_capture, txn->cli_cookie);
|
pool_free2(pool2_capture, txn->cli_cookie);
|
||||||
pool_free2(pool2_capture, txn->srv_cookie);
|
pool_free2(pool2_capture, txn->srv_cookie);
|
||||||
|
LIST_DEL(&s->list);
|
||||||
pool_free2(pool2_session, s);
|
pool_free2(pool2_session, s);
|
||||||
|
|
||||||
/* We may want to free the maximum amount of pools if the proxy is stopping */
|
/* We may want to free the maximum amount of pools if the proxy is stopping */
|
||||||
@ -92,6 +94,7 @@ void session_free(struct session *s)
|
|||||||
/* perform minimal intializations, report 0 in case of error, 1 if OK. */
|
/* perform minimal intializations, report 0 in case of error, 1 if OK. */
|
||||||
int init_session()
|
int init_session()
|
||||||
{
|
{
|
||||||
|
LIST_INIT(&sessions);
|
||||||
pool2_session = create_pool("session", sizeof(struct session), MEM_F_SHARED);
|
pool2_session = create_pool("session", sizeof(struct session), MEM_F_SHARED);
|
||||||
return pool2_session != NULL;
|
return pool2_session != NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user