aboutsummaryrefslogtreecommitdiffstatshomepage
Commit message (Collapse)AuthorAge
* docker-compose.yml: exit from client painlesslyEgor Tensin2023-04-28
|
* ci.sh: build w/ gcc & clangEgor Tensin2023-04-27
|
* fix a typoEgor Tensin2023-04-27
|
* rename commandsEgor Tensin2023-04-27
|
* sqlite: fix error handlingEgor Tensin2023-04-11
|
* put SQL headers to a separate directoryEgor Tensin2023-04-11
|
* sqlite: create indicesEgor Tensin2023-04-11
|
* .editorconfig: minor adjustmentsEgor Tensin2023-04-11
|
* .editorconfig: disable tab indentation for Python filesEgor Tensin2023-04-11
|
* actually create some tables in SQLite databaseEgor Tensin2023-04-11
|
* add .editorconfigEgor Tensin2023-03-04
|
* use `--progress plain` with docker-compose buildEgor Tensin2023-02-25
|
* use --quiet flags for installationsEgor Tensin2023-02-25
|
* make .gitattributes more consistentEgor Tensin2022-12-03
|
* fix preludes in bash scriptsEgor Tensin2022-12-03
|
* README: updateEgor Tensin2022-12-02
|
* add copyright noticesEgor Tensin2022-12-02
|
* README: updateEgor Tensin2022-12-02
|
* docker: bump base imageEgor Tensin2022-12-02
|
* create SQLite database on startupEgor Tensin2022-09-11
|
* log: refactoringEgor Tensin2022-09-08
|
* log: prepend timestampsEgor Tensin2022-09-08
|
* sanitize #include-sEgor Tensin2022-09-08
|
* add README.mdEgor Tensin2022-09-07
|
* add scripts (pre-commit hook, etc.)Egor Tensin2022-09-07
|
* ci: set some environment variablesEgor Tensin2022-09-07
|
* doc: fix a typoEgor Tensin2022-09-07
|
* add ci scriptEgor Tensin2022-09-07
|
* docker: add bin to PATHEgor Tensin2022-09-07
|
* add MakefileEgor Tensin2022-09-07
|
* net: removed unused APIEgor Tensin2022-08-30
|
* net: error out unless net_recv_all receives all bytesEgor Tensin2022-08-30
|
* net: more portableEgor Tensin2022-08-30
| | | | Use a predefined byte order, integers with fixed width, etc.
* net: bind to IPv6Egor Tensin2022-08-30
| | | | | This makes sure we use the dual-stack feature to support both IPv4 and IPv6.
* update command namesEgor Tensin2022-08-28
|
* docker: shorten command valuesEgor Tensin2022-08-28
|
* server: notify workers about requeued jobsEgor Tensin2022-08-28
| | | | This allows free workers to pick up jobs after dead workers.
* worker: fix a crashEgor Tensin2022-08-28
| | | | Found when running in Docker.
* server: notify all threads about shutting downEgor Tensin2022-08-28
| | | | | | | 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
* docker: add initial configurationEgor Tensin2022-08-28
|
* make proper "error" messagesEgor Tensin2022-08-28
| | | | | Previously, the client had no way to distinguish errors from succesful calls.
* fix Alpine buildsEgor Tensin2022-08-28
|
* don't use the latest glibc featuresEgor Tensin2022-08-28
| | | | | pthread_attr_setsigmask_np is only available since 2.32, which is too modern.
* add missing #includeEgor Tensin2022-08-28
|
* cmake: add install() rulesEgor Tensin2022-08-28
|
* make compilers happierEgor Tensin2022-08-28
|
* server: more loggingEgor Tensin2022-08-28
|
* msg: fix a buffer overflowEgor Tensin2022-08-28
| | | | Thanks, Valgrind!
* holy crap, it actually kinda works nowEgor Tensin2022-08-28
| | | | | | | | | | | | | | | | | | | | | | | 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.
* net: use MSG_NOSIGNALEgor Tensin2022-08-28
| | | | | Apparently, if you try to write() into a socket with the other party already gone, your process receives a SIGPIPE. Wtf?