Compare commits
5 Commits
5acab8144d
...
116f7035ed
Author | SHA1 | Date | |
---|---|---|---|
116f7035ed
|
|||
8abc0b8bfa
|
|||
410d692372
|
|||
f42ac83323
|
|||
7d576b2466
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
22
src/server.c
22
src/server.c
@@ -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();
|
||||
|
||||
|
Reference in New Issue
Block a user