Commit message (Collapse) | Author | Age | |
---|---|---|---|
* | string: stpecpy -> string_append | Egor Tensin | 2023-12-30 |
| | |||
* | switch to egor@tensin.name | Egor Tensin | 2023-12-12 |
| | |||
* | tcp_server: keep track of client threads | Egor Tensin | 2023-07-05 |
| | | | | | | | This is a major change, obviously; brought to me by Valgrind, which noticed that we don't actually clean up after cimple-client threads. For a more thorough explanation, please see the added comment in tcp_server.c. | ||
* | fix function names in error messages | Egor Tensin | 2023-06-30 |
| | |||
* | log: support logging levels | Egor Tensin | 2023-06-28 |
| | |||
* | event_loop: support more event types | Egor Tensin | 2023-06-13 |
| | |||
* | event_loop: add event_loop_add_once | Egor Tensin | 2023-06-13 |
| | |||
* | event_loop: hide the API details | Egor Tensin | 2023-06-13 |
| | |||
* | use signalfd to stop on SIGTERM | Egor Tensin | 2023-06-13 |
Is this an overkill? I don't know. The thing is, correctly intercepting SIGTERM (also SIGINT, etc.) is incredibly tricky. For example, before this commit, my I/O loops in server.c and worker.c were inherently racy. This was immediately obvious if you tried to run the tests. The tests (especially the Valgrind flavour) would run a worker, wait until it prints a "Waiting for a new command" line, and try to kill it using SIGTERM. The problem is, the global_stop_flag check could have already been executed by the worker, and it would hang forever in recv(). The solution seems to be to use signalfd and select()/poll(). I've never used either before, but it seems to work well enough - at least the very same tests pass and don't hang now. |