File: idlers.c

package info (click to toggle)
pen 0.34.1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 844 kB
  • ctags: 686
  • sloc: ansic: 6,364; sh: 1,552; makefile: 38
file content (45 lines) | stat: -rw-r--r-- 795 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "config.h"
#include "conn.h"
#include "diag.h"
#include "idlers.h"
#include "server.h"

int idlers = 0, idlers_wanted = 0;

void close_idlers(int n)
{
	int conn;

	DEBUG(2, "close_idlers(%d)", n);
	for (conn = 0; n > 0 && conn < connections_max; conn++) {
		if (idler(conn)) {
			DEBUG(3, "Closing idling connection %d", conn);
			close_conn(conn);
			n--;
		}
	}
}

int add_idler(void)
{
#ifdef HAVE_LIBSSL
	int conn = store_conn(-1, NULL, -1);
#else
	int conn = store_conn(-1, -1);
#endif
	if (conn == -1) return 0;
	conns[conn].initial = server_by_roundrobin();
	if (conns[conn].initial == NO_SERVER) {
		close_conn(conn);
		return 0;
	}
	if (!try_server(conns[conn].initial, conn)) {
		if (!failover_server(conn)) {
			close_conn(conn);
			return 0;
		}
	}
	idlers++;
	return 1;
}