183 lines
8.2 KiB
C
183 lines
8.2 KiB
C
$NetBSD: patch-mpmt__server.c,v 1.2 2015/06/12 23:39:11 taca Exp $
|
|
|
|
Avoid CONF name colision.
|
|
|
|
--- mpmt_server.c.orig 2014-10-23 09:20:46.000000000 +0000
|
|
+++ mpmt_server.c
|
|
@@ -49,7 +49,7 @@ extern int MAX_KEEPALIVE_REQUESTS;
|
|
extern int MAX_SECS_TO_LINGER;
|
|
extern int MAX_REQUESTS_BEFORE_REALLOCATE_MEM;
|
|
extern int MAX_REQUESTS_PER_CHILD;
|
|
-extern struct ci_server_conf CONF;
|
|
+extern struct ci_server_conf ci_CONF;
|
|
|
|
typedef struct server_decl {
|
|
int srv_id;
|
|
@@ -232,13 +232,13 @@ static void cancel_all_threads()
|
|
ci_thread_cond_broadcast(&(con_queue->queue_cond));
|
|
/*wait for a milisecond*/
|
|
ci_usleep(1000);
|
|
- servers_running = CONF.THREADS_PER_CHILD;
|
|
+ servers_running = ci_CONF.THREADS_PER_CHILD;
|
|
while (servers_running && wait_for_workers >= 0) {
|
|
/*child_data->to_be_killed, may change while we are inside this loop*/
|
|
if (child_data->to_be_killed == IMMEDIATELY) {
|
|
CHILD_HALT = 1;
|
|
}
|
|
- for (i=0; i<CONF.THREADS_PER_CHILD; i++) {
|
|
+ for (i=0; i<ci_CONF.THREADS_PER_CHILD; i++) {
|
|
if (threads_list[i] != NULL) { /* if the i thread is still alive*/
|
|
if (!threads_list[i]->running) { /*if the i thread is not running any more*/
|
|
ci_debug_printf(5, "Cancel server %d, thread_id %lu (%d)\n",
|
|
@@ -257,7 +257,7 @@ static void cancel_all_threads()
|
|
}
|
|
}
|
|
}/*the i thread is still alive*/
|
|
- } /* for(i=0;i< CONF.THREADS_PER_CHILD;i++)*/
|
|
+ } /* for(i=0;i< ci_CONF.THREADS_PER_CHILD;i++)*/
|
|
|
|
/*wait for 1 second for the next round*/
|
|
ci_usleep(999999);
|
|
@@ -411,7 +411,7 @@ static int server_reconfigure()
|
|
*/
|
|
old_childs_queue = childs_queue;
|
|
childs_queue = malloc(sizeof(struct childs_queue));
|
|
- if (!create_childs_queue(childs_queue, 2 * CONF.MAX_SERVERS)) {
|
|
+ if (!create_childs_queue(childs_queue, 2 * ci_CONF.MAX_SERVERS)) {
|
|
ci_debug_printf(1,
|
|
"Cannot init shared memory. Fatal error, exiting!\n");
|
|
return 0; /*It is not enough. We must wait all childs to exit ..... */
|
|
@@ -419,10 +419,10 @@ static int server_reconfigure()
|
|
/*
|
|
Start new childs to handle new requests.
|
|
*/
|
|
- if (CONF.START_SERVERS > CONF.MAX_SERVERS)
|
|
- CONF.START_SERVERS = CONF.MAX_SERVERS;
|
|
+ if (ci_CONF.START_SERVERS > ci_CONF.MAX_SERVERS)
|
|
+ ci_CONF.START_SERVERS = ci_CONF.MAX_SERVERS;
|
|
|
|
- for (i = 0; i < CONF.START_SERVERS; i++) {
|
|
+ for (i = 0; i < ci_CONF.START_SERVERS; i++) {
|
|
start_child(LISTEN_SOCKET);
|
|
}
|
|
|
|
@@ -851,11 +851,11 @@ void child_main(int sockfd, int pipefd)
|
|
ci_stat_attach_mem(child_data->stats, child_data->stats_size, NULL);
|
|
|
|
threads_list =
|
|
- (server_decl_t **) malloc((CONF.THREADS_PER_CHILD + 1) *
|
|
+ (server_decl_t **) malloc((ci_CONF.THREADS_PER_CHILD + 1) *
|
|
sizeof(server_decl_t *));
|
|
- con_queue = init_queue(CONF.THREADS_PER_CHILD);
|
|
+ con_queue = init_queue(ci_CONF.THREADS_PER_CHILD);
|
|
|
|
- for (i = 0; i < CONF.THREADS_PER_CHILD; i++) {
|
|
+ for (i = 0; i < ci_CONF.THREADS_PER_CHILD; i++) {
|
|
if ((threads_list[i] = newthread(con_queue)) == NULL) {
|
|
exit(-1); // FATAL error.....
|
|
}
|
|
@@ -864,7 +864,7 @@ void child_main(int sockfd, int pipefd)
|
|
(void *) threads_list[i]);
|
|
threads_list[i]->srv_pthread = thread;
|
|
}
|
|
- threads_list[CONF.THREADS_PER_CHILD] = NULL;
|
|
+ threads_list[ci_CONF.THREADS_PER_CHILD] = NULL;
|
|
/*Now start the listener thread.... */
|
|
ret = ci_thread_create(&thread, (void *(*)(void *)) listener_thread,
|
|
(void *) &sockfd);
|
|
@@ -957,7 +957,7 @@ int start_child(int fd)
|
|
MY_PROC_PID = getpid();
|
|
attach_childs_queue(childs_queue);
|
|
child_data =
|
|
- register_child(childs_queue, getpid(), CONF.THREADS_PER_CHILD, pfd[1]);
|
|
+ register_child(childs_queue, getpid(), ci_CONF.THREADS_PER_CHILD, pfd[1]);
|
|
close(pfd[1]);
|
|
child_main(fd, pfd[0]);
|
|
exit(0);
|
|
@@ -1026,11 +1026,11 @@ int start_server()
|
|
char command_buffer[COMMANDS_BUFFER_SIZE];
|
|
int user_informed = 0;
|
|
|
|
- ctl_socket = ci_named_pipe_create(CONF.COMMANDS_SOCKET);
|
|
+ ctl_socket = ci_named_pipe_create(ci_CONF.COMMANDS_SOCKET);
|
|
if (ctl_socket < 0) {
|
|
ci_debug_printf(1,
|
|
"Error opening control socket %s. Fatal error, exiting!\n",
|
|
- CONF.COMMANDS_SOCKET);
|
|
+ ci_CONF.COMMANDS_SOCKET);
|
|
exit(0);
|
|
}
|
|
|
|
@@ -1040,7 +1040,7 @@ int start_server()
|
|
exit(0);
|
|
}
|
|
childs_queue = malloc(sizeof(struct childs_queue));
|
|
- if (!create_childs_queue(childs_queue, 2 * CONF.MAX_SERVERS)) {
|
|
+ if (!create_childs_queue(childs_queue, 2 * ci_CONF.MAX_SERVERS)) {
|
|
ci_proc_mutex_destroy(&accept_mutex);
|
|
ci_debug_printf(1,
|
|
"Can't init shared memory. Fatal error, exiting!\n");
|
|
@@ -1050,10 +1050,10 @@ int start_server()
|
|
init_commands();
|
|
pid = 1;
|
|
#ifdef MULTICHILD
|
|
- if (CONF.START_SERVERS > CONF.MAX_SERVERS)
|
|
- CONF.START_SERVERS = CONF.MAX_SERVERS;
|
|
+ if (ci_CONF.START_SERVERS > ci_CONF.MAX_SERVERS)
|
|
+ ci_CONF.START_SERVERS = ci_CONF.MAX_SERVERS;
|
|
|
|
- for (i = 0; i < CONF.START_SERVERS; i++) {
|
|
+ for (i = 0; i < ci_CONF.START_SERVERS; i++) {
|
|
if (pid)
|
|
pid = start_child(LISTEN_SOCKET);
|
|
}
|
|
@@ -1068,7 +1068,7 @@ int start_server()
|
|
}
|
|
if (ret < 0) { /*Eof received on pipe. Going to reopen ... */
|
|
ci_named_pipe_close(ctl_socket);
|
|
- ctl_socket = ci_named_pipe_open(CONF.COMMANDS_SOCKET);
|
|
+ ctl_socket = ci_named_pipe_open(ci_CONF.COMMANDS_SOCKET);
|
|
if (ctl_socket < 0) {
|
|
ci_debug_printf(1,
|
|
"Error opening control socket. We are unstable and going down!");
|
|
@@ -1100,16 +1100,16 @@ int start_server()
|
|
kill(childs_queue->childs[child_indx].pid, SIGTERM);
|
|
|
|
}
|
|
- else if ((freeservers <= CONF.MIN_SPARE_THREADS && childs < CONF.MAX_SERVERS)
|
|
- || childs < CONF.START_SERVERS) {
|
|
+ else if ((freeservers <= ci_CONF.MIN_SPARE_THREADS && childs < ci_CONF.MAX_SERVERS)
|
|
+ || childs < ci_CONF.START_SERVERS) {
|
|
ci_debug_printf(8,
|
|
"Free Servers: %d, children: %d. Going to start a child .....\n",
|
|
freeservers, childs);
|
|
pid = start_child(LISTEN_SOCKET);
|
|
}
|
|
- else if (freeservers >= CONF.MAX_SPARE_THREADS &&
|
|
- childs > CONF.START_SERVERS &&
|
|
- (freeservers - CONF.THREADS_PER_CHILD) > CONF.MIN_SPARE_THREADS) {
|
|
+ else if (freeservers >= ci_CONF.MAX_SPARE_THREADS &&
|
|
+ childs > ci_CONF.START_SERVERS &&
|
|
+ (freeservers - ci_CONF.THREADS_PER_CHILD) > ci_CONF.MIN_SPARE_THREADS) {
|
|
|
|
if ((child_indx = find_an_idle_child(childs_queue)) >= 0) {
|
|
childs_queue->childs[child_indx].father_said =
|
|
@@ -1124,7 +1124,7 @@ int start_server()
|
|
user_informed = 0;
|
|
}
|
|
}
|
|
- else if (childs == CONF.MAX_SERVERS && freeservers < CONF.MIN_SPARE_THREADS) {
|
|
+ else if (childs == ci_CONF.MAX_SERVERS && freeservers < ci_CONF.MIN_SPARE_THREADS) {
|
|
if(! user_informed) {
|
|
ci_debug_printf(1,
|
|
"ATTENTION!!!! Not enough available servers (children %d, free servers %d, used servers %d)!!!!! "
|
|
@@ -1155,7 +1155,7 @@ int start_server()
|
|
#else
|
|
child_data = (child_shared_data_t *) malloc(sizeof(child_shared_data_t));
|
|
child_data->pid = 0;
|
|
- child_data->freeservers = CONF.THREADS_PER_CHILD;
|
|
+ child_data->freeservers = ci_CONF.THREADS_PER_CHILD;
|
|
child_data->usedservers = 0;
|
|
child_data->requests = 0;
|
|
child_data->connections = 0;
|