aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/process.c (unfollow)
Commit message (Collapse)Author
2023-07-18process: preserve the exit code moreEgor Tensin
If the process is killed by a signal, preserve the exit code as it would be reported by $?.
2023-07-09store process output in SQLiteEgor Tensin
2023-06-30use __WNOTHREAD w/ waitpidEgor Tensin
I learned about this flag on my previous job; basically, it should be enabled by default IMO, so that the thread doesn't receive signals from other threads' children. Here, it doesn't matter too much, since we're waiting for a specific child. However, if we were to use waitpid(-1, ...), it would be essential to use this flag. Still, even here, it's good to have this on.
2023-06-28process: fix function name in logsEgor Tensin
2023-06-14minor refactoringEgor Tensin
2023-06-09add {file,net}_close as a wrapper to close(2)Egor Tensin
2023-05-14process: add process_output_dumpEgor Tensin
2022-12-02add copyright noticesEgor Tensin
2022-09-08log: refactoringEgor Tensin
2022-09-07ci: set some environment variablesEgor Tensin
2022-08-28worker: fix a crashEgor Tensin
Found when running in Docker.
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-26add check_errno macroEgor Tensin
2022-08-26worker: capture process outputEgor Tensin
2022-08-26add some more codeEgor Tensin
This adds a basic "worker" program. You can now do something like ./server & ./worker & ./client ci_run URL REV and the server should pass a message to worker, after which it should clone the repository at URL, checkout REV, and try to run the CI script. It's extremely unfinished: I need to sort out the graceful shutdown, how the server manages workers, etc.