enum srv_admin next_admin, cur_admin; /* server maintenance status : SRV_ADMF_* */
signed char use_ssl; /* ssl enabled (1: on, 0: disabled, -1 forced off) */
unsigned int pp_opts; /* proxy protocol options (SRV_PP_*) */
+ struct list global_list; /* attach point in the global servers_list */
struct server *next;
int cklen; /* the len of the cookie, to speed up checks */
int rdr_len; /* the length of the redirection prefix */
extern struct idle_conns idle_conns[MAX_THREADS];
extern struct eb_root idle_conn_srv;
extern struct task *idle_conn_task;
+extern struct list servers_list;
extern struct dict server_key_dict;
int srv_downtime(const struct server *s);
srvdf->fct(s);
EXTRA_COUNTERS_FREE(s->extra_counters);
+ LIST_DEL(&s->global_list);
free(s);
s = s_next;
}/* end while(s) */
#include <haproxy/proxy-t.h>
#include <haproxy/regex.h>
#include <haproxy/sample.h>
-#include <haproxy/server-t.h>
+#include <haproxy/server.h>
#include <haproxy/session.h>
#include <haproxy/stats-t.h>
#include <haproxy/stream.h>
socket_tcp.pendconns = EB_ROOT;
socket_tcp.idle_conns_tree = NULL;
socket_tcp.safe_conns_tree = NULL;
+ LIST_ADD(&servers_list, &socket_tcp.global_list);
socket_tcp.next_state = SRV_ST_RUNNING; /* early server setup */
socket_tcp.last_change = 0;
socket_tcp.conf.file = strdup("HLUA_INTERNAL");
socket_ssl.pendconns = EB_ROOT;
socket_ssl.idle_conns_tree = NULL;
socket_ssl.safe_conns_tree = NULL;
+ LIST_ADD(&servers_list, &socket_ssl.global_list);
socket_ssl.next_state = SRV_ST_RUNNING; /* early server setup */
socket_ssl.last_change = 0;
socket_ssl.conf.file = strdup("HLUA_INTERNAL");
__decl_thread(HA_SPINLOCK_T idle_conn_srv_lock);
struct eb_root idle_conn_srv = EB_ROOT;
struct task *idle_conn_task = NULL;
+struct list servers_list = LIST_HEAD_INIT(servers_list);
/* The server names dictionary */
struct dict server_key_dict = {
srv->socks4_addr = src->socks4_addr;
}
+/* allocate a server and attach it to the global servers_list. Returns
+ * the server on success, otherwise NULL.
+ */
struct server *new_server(struct proxy *proxy)
{
struct server *srv;
srv->proxy = proxy;
MT_LIST_INIT(&srv->actconns);
srv->pendconns = EB_ROOT;
+ LIST_ADDQ(&servers_list, &srv->global_list);
srv->next_state = SRV_ST_RUNNING; /* early server setup */
srv->last_change = now.tv_sec;
#endif
free_check(&newsrv->agent);
free_check(&newsrv->check);
+ LIST_DEL(&newsrv->global_list);
}
free(newsrv);
return i - srv->tmpl_info.nb_low;