summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--TODO.md6
-rw-r--r--httpd.c34
3 files changed, 38 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index d0e09d2..9f729b5 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ CFLAGS=-g -Wall
all: snac
snac: snac.o main.o data.o http.o httpd.o webfinger.o activitypub.o html.o
- $(CC) -L/usr/local/lib *.o -lcurl -lcrypto -o $@
+ $(CC) -L/usr/local/lib *.o -lcurl -lcrypto -pthread -o $@
.c.o:
$(CC) $(CFLAGS) -I/usr/local/include -c $<
diff --git a/TODO.md b/TODO.md
index 49c3771..ea37fe2 100644
--- a/TODO.md
+++ b/TODO.md
@@ -2,14 +2,14 @@
## Open
-Implement the helper thread.
-
Import the man pages.
Implement the 'init' command-line option.
Implement the 'adduser' command-line option.
+Implement the local timeline cache.
+
Show dates in local time and not UTC.
Add web interface for private messages.
@@ -131,3 +131,5 @@ Add a user configuration flag to hide likes from the timeline (2022-10-01T20:27:
Implement an input queue (2022-10-01T20:27:52+0200).
Refactor HTML rendering because it's a mess and write build_timeline(), that generates a big structure with everything to show in a timeline, to be passed to the HTML renderer (2022-10-01T20:27:52+0200).
+
+Implement the helper thread (2022-10-01T20:56:46+0200).
diff --git a/httpd.c b/httpd.c
index a57b4c1..f6f9a18 100644
--- a/httpd.c
+++ b/httpd.c
@@ -11,6 +11,7 @@
#include "snac.h"
#include <setjmp.h>
+#include <pthread.h>
/* susie.png */
const char *susie =
@@ -199,12 +200,41 @@ void term_handler(int s)
}
+static void *helper_thread(void *arg)
+/* helper thread (queue management) */
+{
+ srv_log(xs_fmt("subthread start"));
+
+ while (srv_running) {
+ xs *list = user_list();
+ char *p, *uid;
+
+ p = list;
+ while (xs_list_iter(&p, &uid)) {
+ snac snac;
+
+ if (user_open(&snac, uid)) {
+ process_queue(&snac);
+ user_free(&snac);
+ }
+ }
+
+ sleep(3);
+ }
+
+ srv_log(xs_fmt("subthread stop"));
+
+ return NULL;
+}
+
+
void httpd(void)
/* starts the server */
{
char *address;
int port;
int rs;
+ pthread_t htid;
address = xs_dict_get(srv_config, "address");
port = xs_number_get(xs_dict_get(srv_config, "port"));
@@ -222,6 +252,8 @@ void httpd(void)
srv_log(xs_fmt("httpd start %s:%d", address, port));
+ pthread_create(&htid, NULL, helper_thread, NULL);
+
if (setjmp(on_break) == 0) {
for (;;) {
httpd_connection(rs);
@@ -231,7 +263,7 @@ void httpd(void)
srv_running = 0;
/* wait for the helper thread to end */
- /* ... */
+ pthread_join(htid, NULL);
srv_log(xs_fmt("httpd stop %s:%d", address, port));
}