aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src (unfollow)
Commit message (Collapse)Author
2023-05-07cmake: don't install() valgrind.shEgor Tensin
Turns out, I don't really need to install it for the tests.
2023-05-07valgrind: quiet modeEgor Tensin
2023-05-07add tests to run binaries under ValgrindEgor Tensin
This was quite a bit of refactoring in test/; everything should be more maintainable and robust in theory. Also, valgrind.sh was fixed to use exec (so that signals are passed to the underlying process); Valgrind command line options have also been tweaked. ./ci.sh fails now, but that should be fixable.
2023-05-06add a cimple-valgrind executableEgor Tensin
2023-05-06add a TODO noteEgor Tensin
2023-05-06shut down server/workers gracefully on SIGTERMEgor Tensin
2023-05-06get rid of __attribute__((constructor))Egor Tensin
Explicit is better than implicit.
2023-04-29add a default SQLite database pathEgor Tensin
2023-04-29cmd_line: read executable name from /proc/self/exeEgor Tensin
2023-04-29dedupe command line routinesEgor Tensin
2023-04-29make struct storage_settings_sqlite opaqueEgor Tensin
2023-04-29make struct ci_queue_entry opaqueEgor Tensin
2023-04-29net: use size instead of length for variable namesEgor Tensin
2023-04-29net: add struct bufEgor Tensin
2023-04-29make struct client opaqueEgor Tensin
2023-04-29make struct worker opaqueEgor Tensin
2023-04-29make struct server opaqueEgor Tensin
2023-04-29make struct tcp_server opaqueEgor Tensin
2023-04-27fix a typoEgor Tensin
2023-04-27rename commandsEgor Tensin
2023-04-11sqlite: fix error handlingEgor Tensin
2023-04-11put SQL headers to a separate directoryEgor Tensin
2023-04-11sqlite: create indicesEgor Tensin
2023-04-11actually create some tables in SQLite databaseEgor Tensin
2022-12-02add copyright noticesEgor Tensin
2022-09-11create SQLite database on startupEgor Tensin
2022-09-08log: refactoringEgor Tensin
2022-09-08log: prepend timestampsEgor Tensin
2022-09-08sanitize #include-sEgor Tensin
2022-09-07ci: set some environment variablesEgor Tensin
2022-08-30net: removed unused APIEgor Tensin
2022-08-30net: error out unless net_recv_all receives all bytesEgor Tensin
2022-08-30net: more portableEgor Tensin
Use a predefined byte order, integers with fixed width, etc.
2022-08-30net: bind to IPv6Egor Tensin
This makes sure we use the dual-stack feature to support both IPv4 and IPv6.
2022-08-28update command namesEgor Tensin
2022-08-28docker: shorten command valuesEgor Tensin
2022-08-28server: notify workers about requeued jobsEgor Tensin
This allows free workers to pick up jobs after dead workers.
2022-08-28worker: fix a crashEgor Tensin
Found when running in Docker.
2022-08-28server: notify all threads about shutting downEgor Tensin
The problem is pthread_cond_destroy is unsafe to call if there're threads waiting in pthread_cond_wait. I'm not sure this fix is enough: what if the "broadcast" doesn't reach the threads until we call pthread_cond_destroy? Does it even work that way? Idk
2022-08-28make proper "error" messagesEgor Tensin
Previously, the client had no way to distinguish errors from succesful calls.
2022-08-28fix Alpine buildsEgor Tensin
2022-08-28don't use the latest glibc featuresEgor Tensin
pthread_attr_setsigmask_np is only available since 2.32, which is too modern.
2022-08-28add missing #includeEgor Tensin
2022-08-28cmake: add install() rulesEgor Tensin
2022-08-28make compilers happierEgor Tensin
2022-08-28server: more loggingEgor Tensin
2022-08-28msg: fix a buffer overflowEgor Tensin
Thanks, Valgrind!
2022-08-28holy crap, it actually kinda works nowEgor Tensin
Previously, I had a stupid system where I would create a thread after every accept(), and put worker descriptors in a queue. A special "scheduler" thread would then pick them out, and give out jobs to complete. The problem was, of course, I couldn't conveniently poll job status from workers. I thought about using poll(), but that turned out to be a horribly complicated API. How do I deal with partial reads, for example? I don't honestly know. Then it hit me that I could just use the threads that handle accept()ed connections as "worker threads", which would synchronously schedule jobs and wait for them to complete. This solves every problem and removes the need for a lot of inter-thread synchronization magic. It even works now, holy crap! You can launch and terminate workers at will, and they will pick up new jobs automatically. As a side not, msg_recv_and_handle turned out to be too limiting and complicated for me, so I got rid of that, and do normal msg_recv/msg_send calls.
2022-08-28net: use MSG_NOSIGNALEgor Tensin
Apparently, if you try to write() into a socket with the other party already gone, your process receives a SIGPIPE. Wtf?
2022-08-28server: shutting down more gracefullyEgor Tensin