| Commit message (Collapse) | Author | Age | |
|---|---|---|---|
| * | remove annoying trailing period from repo URLs | Egor Tensin | 2026-09-21 |
| | | |||
| * | finally, perfect .clang-format settings? | Egor Tensin | 2026-06-13 |
| | | |||
| * | switch from tabs to spaces | Egor Tensin | 2026-06-13 |
| | | | | | | | It was fun while it lasted, but I do believe that spaces are strictly superior, and clang-format struggles with tabs while using advanced configuration options. | ||
| * | unify my .clang-format files | Egor Tensin | 2026-06-12 |
| | | |||
| * | 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. | |||
