5 Commits

6 changed files with 37 additions and 13 deletions

View File

@@ -212,8 +212,9 @@ void async_thread(void) {
int num_fds;
long ts, min_ts, cur_ts;
listen_queue_t *l;
evt_listen_t **local = list_create(sizeof(evt_listen_t *), 16);
if (local == NULL) {
evt_listen_t **local;
if ((local = list_create(sizeof(evt_listen_t *), 16)) == NULL) {
critical("Unable to create async local list");
return;
}
@@ -246,6 +247,7 @@ void async_thread(void) {
// reset size of queue
l->n = 0;
// TODO timeout calculation = O(n)
// calculate wait timeout
min_ts = -1000, cur_ts = clock_micros();;
for (int i = 0; i < list_size(local); i++) {
@@ -270,6 +272,8 @@ void async_thread(void) {
for (int i = 0; i < num_fds; i++) {
evt_listen_t *evt = events[i].data.ptr;
if (evt == NULL) continue;
if (async_exec(evt, async_e2a(events[i].events)) == 0) {
if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, evt->fd, NULL) == -1) {
if (errno == EBADF) {
@@ -288,6 +292,7 @@ void async_thread(void) {
}
free(evt);
events[i].data.ptr = NULL;
}
}

View File

@@ -18,8 +18,9 @@ extern const char *MMDB_strerror(int err);
extern const char *ERR_reason_error_string(unsigned long err);
static int error_compress(unsigned long err) {
if (err & 0xFF0000) warning("Lossy error code compression!");
return ((int) err & 0xFFFF) | (((int) err >> 8) & 0xFF0000);
int comp = ((int) err & 0xFFFF) | (((int) err >> 8) & 0xFF0000);
if (err & 0xFF0000) warning("Lossy error code compression! (%08lX -> %08X)", err, comp);
return comp;
}
static unsigned long error_decompress(int err) {

View File

@@ -14,8 +14,11 @@ typedef struct {
} list_meta_t;
static void *list_resize(list_meta_t *list, int new_size) {
if (new_size <= 0)
if (new_size <= 0) {
return NULL;
} else if (new_size == list->max_size) {
return list;
}
list_meta_t *new_ptr = realloc(list, sizeof(list_meta_t) + list->elem_size * new_size);
if (new_ptr == NULL)
@@ -61,6 +64,10 @@ int list_find(void *list_ptr, void *elem) {
return -1;
}
int list_contains(void *list_ptr, void *elem) {
return list_find(list_ptr, elem) != -1;
}
void *list_insert(void *list_ptr, void *elem, int n) {
void *ptr = NULL;
list_ptr = list_insert_ptr(list_ptr, &ptr, n);

View File

@@ -8,6 +8,8 @@ int list_size(const void *list_ptr);
int list_find(void *list_ptr, void *elem);
int list_contains(void *list_ptr, void *elem);
void *list_insert(void *list_ptr, void *elem, int n);
void *list_insert_ptr(void *list_ptr, void **elem, int n);

View File

@@ -187,7 +187,8 @@ void logger_set_name(const char *restrict format, ...) {
}
// set thread name
pthread_setname_np(pthread_self(), global_name);
// warning: max length is 16 (incl. terminating null byte)
pthread_setname_np(pthread_self(), ptr);
// cleanup
va_end(args);

View File

@@ -313,12 +313,6 @@ int main(int argc, char *const argv[]) {
return 1;
}
if ((ret = cache_init()) != 0) {
geoip_free();
if (ret == -1) critical("Unable to initialize cache");
return 1;
}
for (int i = 0; i < CONFIG_MAX_CERT_CONFIG; i++) {
const cert_config_t *conf = &config.certs[i];
if (conf->name[0] == 0) break;
@@ -392,7 +386,21 @@ int main(int argc, char *const argv[]) {
}
logger_init();
logger_set_name("server");
if ((ret = cache_init()) != 0) {
if (ret == -1) critical("Unable to initialize cache");
ssl_free();
geoip_free();
list_free(clients);
sem_destroy(&sem_clients_lock);
async_free();
proxy_unload();
logger_stop();
logger_join();
return 1;
}
logger_set_name("main");
workers_init();