#include "IOHandler.h"
#include "statistics.h"
-static struct {
- time_t start_time;
- int running : 1;
- int restart : 1;
- int run_as_daemon : 1;
- int daemonized : 1;
- int loglevel : 8;
- int loaded_config : 1;
- int running_threads : 8;
-
- int argc;
- char **argv;
-
- char config[MAXLEN];
- char pidfile[MAXLEN];
-} process_state;
+struct ProcessState process_state;
static FILE *log_fptr = NULL;
static pthread_t *current_threads = NULL;
#endif
-static void main_tread(void *empty);
+static void *main_tread(void *empty);
static TIMEQ_CALLBACK(clear_cache);
static TIMEQ_CALLBACK(main_checkauths);
static void check_firstrun();
void shutdown_subsystems() {
free_sockets(1);
- usleep(10000); //wait for disconnect (10ms)
+ //wait 50ms (run iohandler)
+ {
+ struct timeval timeout, ctime1, ctime2;
+ gettimeofday(&ctime1, NULL);
+ ctime1.tv_usec += 50000;
+ if(ctime1.tv_usec > 1000000) {
+ ctime1.tv_usec -= 1000000;
+ ctime1.tv_sec++;
+ }
+ do {
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 10000;
+ iohandler_poll_timeout(timeout);
+ gettimeofday(&ctime2, NULL);
+ } while(timeval_is_bigger(ctime1, ctime2));
+ }
stop_modules();
free_sockets(0);
qserver_free();
}
static void main_start_threads() {
- int tid_id = 0;
int worker_threads = get_int_field("General.worker_threads");
if(!worker_threads) worker_threads = 1;
#ifdef HAVE_THREADS
+ int tid_id = 0;
{
current_threads = calloc(worker_threads, sizeof(*current_threads));
for(tid_id = 0; tid_id < worker_threads; tid_id++) {
/* MAIN FUNCTION(S) */
-static void main_tread(void *empty) {
+static void *main_tread(void *empty) {
while(process_state.running) {
iohandler_poll();
}
+ return NULL;
}
static void main_restart_process() {
//load configuration
int errid;
- if(errid = reload_configuration()) {
+ if((errid = reload_configuration())) {
fprintf(stderr, "Unable to load configuration file `%s`. (errid: %d)\n", process_state.config, errid);
exit(0);
}