Connection jobs are treated as urgent.

This commit is contained in:
default 2023-03-02 12:38:02 +01:00
parent e705e5c3ed
commit 5036cb5e11
4 changed files with 13 additions and 9 deletions

View file

@ -1316,7 +1316,7 @@ int process_queue(void)
xs *q_item = dequeue(fn); xs *q_item = dequeue(fn);
if (q_item != NULL) { if (q_item != NULL) {
job_post(q_item); job_post(q_item, 0);
cnt++; cnt++;
} }
} }

2
data.c
View file

@ -1497,7 +1497,7 @@ void enqueue_output_raw(const char *keyid, const char *seckey,
/* if it's to be sent right now, bypass the disk queue and post the job */ /* if it's to be sent right now, bypass the disk queue and post the job */
if (retries == 0 && job_fifo_ready()) if (retries == 0 && job_fifo_ready())
job_post(qmsg); job_post(qmsg, 0);
else { else {
qmsg = _enqueue_put(fn, qmsg); qmsg = _enqueue_put(fn, qmsg);
srv_debug(1, xs_fmt("enqueue_output %s %s %d", inbox, fn, retries)); srv_debug(1, xs_fmt("enqueue_output %s %s %d", inbox, fn, retries));

16
httpd.c
View file

@ -262,7 +262,7 @@ int job_fifo_ready(void)
} }
void job_post(const xs_val *job) void job_post(const xs_val *job, int urgent)
/* posts a job for the threads to process it */ /* posts a job for the threads to process it */
{ {
if (job != NULL) { if (job != NULL) {
@ -270,8 +270,12 @@ void job_post(const xs_val *job)
pthread_mutex_lock(&job_mutex); pthread_mutex_lock(&job_mutex);
/* add to the fifo */ /* add to the fifo */
if (job_fifo != NULL) if (job_fifo != NULL) {
job_fifo = xs_list_append(job_fifo, job); if (urgent)
job_fifo = xs_list_insert(job_fifo, 0, job);
else
job_fifo = xs_list_append(job_fifo, job);
}
/* unlock the mutex */ /* unlock the mutex */
pthread_mutex_unlock(&job_mutex); pthread_mutex_unlock(&job_mutex);
@ -386,7 +390,7 @@ static void *background_thread(void *arg)
xs *q_item = xs_dict_new(); xs *q_item = xs_dict_new();
q_item = xs_dict_append(q_item, "type", "purge"); q_item = xs_dict_append(q_item, "type", "purge");
job_post(q_item); job_post(q_item, 0);
} }
if (cnt == 0) { if (cnt == 0) {
@ -485,7 +489,7 @@ void httpd(void)
if (f != NULL) { if (f != NULL) {
xs *job = xs_data_new(&f, sizeof(FILE *)); xs *job = xs_data_new(&f, sizeof(FILE *));
job_post(job); job_post(job, 1);
} }
else else
break; break;
@ -496,7 +500,7 @@ void httpd(void)
/* send as many empty jobs as working threads */ /* send as many empty jobs as working threads */
for (n = 1; n < n_threads; n++) for (n = 1; n < n_threads; n++)
job_post(NULL); job_post(NULL, 0);
/* wait for all the threads to exit */ /* wait for all the threads to exit */
for (n = 0; n < n_threads; n++) for (n = 0; n < n_threads; n++)

2
snac.h
View file

@ -218,5 +218,5 @@ int adduser(const char *uid);
int resetpwd(snac *snac); int resetpwd(snac *snac);
int job_fifo_ready(void); int job_fifo_ready(void);
void job_post(const xs_val *job); void job_post(const xs_val *job, int urgent);
void job_wait(xs_val **job); void job_wait(xs_val **job);