| Commit message (Expand) | Author | Age | Files | Lines |
| * | Bump to 1.5.1•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
HEADv1.5.1main |  Michał Górny | 2026-06-22 | 1 | -1/+1 |
| * | Fix memory leak of pollhandle in steve_poll()•••The steve_poll() function would leak memory in form of the pollhandle
in case a token is immediately available. Because then the pollhandle
is not placed in the waiters queue, where it is eventually deallocated
via the ~steve_waiter destructor.
Fix this my explicitly destroying the pollhandle if we do not put it
in the waiters queue.
Signed-off-by: Florian Schmaus <flow@gentoo.org>
Part-of: https://codeberg.org/gentoo/steve/pulls/2
Merges: https://codeberg.org/gentoo/steve/pulls/2
Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Florian Schmaus | 2026-05-23 | 1 | -1/+6 |
| * | Fix token leak if client performs non-blocking poll•••If a client performs a non-blocking poll while no tokens were
available, FUSE/CUSE passes a nullptr as the pollhandle argument
to steve_poll(). Steve would previously push this nullptr into the
waiters queue.
Later, when a token became available, the server would wake this
"ghost" waiter, permanently reserving a token for a client that was
not actually waiting for it. This effectively leaks the token until
the client process exited.
Fix this by only queuing a waiter request if the pollhandle is
non-null (representing an actual sleeping client).
Signed-off-by: Florian Schmaus <flow@gentoo.org>
Part-of: https://codeberg.org/gentoo/steve/pulls/5
Merges: https://codeberg.org/gentoo/steve/pulls/5
Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Florian Schmaus | 2026-05-23 | 1 | -1/+2 |
| * | Do not pass an invalid buffer to FUSE in steve_handle_cuse()•••When steve is stopped and the CUSE connection closes,
fuse_session_recieve_buf() returns 0. In thise case
steve_handle_cuse() shuts down the event loop but did not return,
causing an invalid buffer being passed to fuse_session_process_buf().
This causes FUSE to abort, bypassing a clean unmount, which manifests
as a memory leak.
Fix this by only invoking fuse_session_process_buf() if rd > 0.
This also changes the code so that the error handling is only
performed if rd != -EINTR && rd != -EAGAIN, as those a transient
errors that should be simply ignored.
Signed-off-by: Florian Schmaus <flow@gentoo.org>
Part-of: https://codeberg.org/gentoo/steve/pulls/3
Merges: https://codeberg.org/gentoo/steve/pulls/3
Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Florian Schmaus | 2026-05-22 | 1 | -2/+3 |
| * | Run steve service under SCHED_FIFO•••As a system-wide jobserver, steve orchestrates token distribution for
parallel builds. Under heavy load, the spawned jobs, e.g., compiler
and linker processes quickly saturate all available CPU time.
When the system is fully saturated, steve suffers from scheduling
starvation, which affects the overall system efficiency. If a client
releases a token or requests one, steve may not be scheduled
immediately, leading to a form of priority inversion where
compute-bound tasks delay the critical path of I/O-bound token
dispatch. This causes workers to idle unnecessarily, extending
overall build times.
Since steve's workload is strictly I/O-bound, i.e., reading and
writing small pipe messages, and its CPU footprint is minuscule, it is
an ideal candidate for higher-priority fifo (real-time)
scheduling. Moving it to SCHED_FIFO ensures that token dispatch
preempts standard compilation tasks instantly, maintaining high system
utilization.
The SCHED_FIFO priority is kept at a moderate real-time level of 10 to
easily outrank standard user-space workloads without interfering with
critical kernel threads like IRQ handlers.
Signed-off-by: Florian Schmaus <flow@gentoo.org>
Part-of: https://codeberg.org/gentoo/steve/pulls/4
Merges: https://codeberg.org/gentoo/steve/pulls/4
Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Florian Schmaus | 2026-05-22 | 1 | -0/+2 |
| * | Bump to 1.5.0•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
v1.5.0 |  Michał Górny | 2026-01-30 | 1 | -1/+1 |
| * | stevie: Provide -j value in MAKEFLAGS•••Provide the job count as -j in MAKEFLAGS, to accommodate clients using
that as an upper job bound (e.g. LLVM).
Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2026-01-30 | 1 | -0/+13 |
| * | Include waiters in SIGUSR1 report•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2026-01-10 | 1 | -2/+15 |
| * | Bump to 1.4.0•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
v1.4.0 |  Michał Górny | 2025-12-30 | 1 | -1/+1 |
| * | Add sanity checks for --min-memory-avail•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-30 | 1 | -2/+26 |
| * | Print interrupt message to stderr•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-30 | 1 | -1/+1 |
| * | Refactor more meminfo logic•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-30 | 1 | -7/+11 |
| * | Remove unused flags arg•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-30 | 1 | -1/+1 |
| * | Allow compat ioctls•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-30 | 1 | -5/+0 |
| * | Replace sigabbrev_np() for compatibility with musl•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-29 | 3 | -4/+22 |
| * | Move /proc/meminfo search into a separate function•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-25 | 1 | -25/+41 |
| * | Support adjusting min-memory-avail via stevie•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-25 | 3 | -8/+37 |
| * | Add missing includes•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-25 | 3 | -0/+5 |
| * | Initial support for limiting memory usage•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-24 | 1 | -42/+134 |
| * | Bump to 1.3.1•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
v1.3.1 |  Michał Górny | 2025-12-24 | 1 | -1/+1 |
| * | Use signed integers for job count, to avoid wraparound issues•••Use signed integers throughout. Admittedly, that's not the prettiest
solution possible but it's the easiest way to avoid conversion issues.
Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-23 | 1 | -3/+3 |
| * | README: add compatibility notes•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-22 | 1 | -0/+27 |
| * | README: list some features•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-22 | 1 | -0/+20 |
| * | README: mention stevie•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-22 | 1 | -0/+16 |
| * | README: split install instructions, update usage•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-22 | 1 | -21/+74 |
| * | Specify minimum meson version•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-22 | 1 | -0/+1 |
| * | Bump to 1.3.0•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
v1.3.0 |  Michał Górny | 2025-12-22 | 1 | -1/+1 |
| * | Update docs ofr new groups•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-21 | 1 | -2/+3 |
| * | Share some common message parts•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-20 | 1 | -28/+55 |
| * | Move sources to src/ subdirectory•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-20 | 5 | -2/+2 |
| * | Fix short -s option•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-19 | 1 | -1/+1 |
| * | Report process cmdline in more messages, and add bounds checking•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-19 | 1 | -66/+88 |
| * | Optimize open handler•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-19 | 1 | -27/+33 |
| * | Read /proc/*/cmdline into std::string•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-19 | 1 | -18/+15 |
| * | Free fuse_buf•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-19 | 1 | -3/+3 |
| * | Warn about incorrect tokens once per process•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-18 | 1 | -1/+3 |
| * | Use unique tokens to track specific jobs and report their runtimes•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-18 | 1 | -16/+80 |
| * | Pass steve_process to steve_get_token_char()•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-18 | 1 | -5/+5 |
| * | Return the extra written token unchanged to client•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-18 | 1 | -11/+28 |
| * | Control /dev/steve access via jobserver group•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-17 | 1 | -1/+1 |
| * | Start steve as steve user•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-17 | 2 | -0/+3 |
| * | Bump to 1.2.0•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
v1.2.0 |  Michał Górny | 2025-12-13 | 1 | -1/+1 |
| * | Add a fast path for failed start•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 1 | -0/+2 |
| * | Create test devices in a subdirectory, for easy ACL•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 1 | -1/+1 |
| * | Add a test for reclaiming tokens on exit•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 1 | -2/+20 |
| * | Add writing tests•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 1 | -0/+37 |
| * | Add a test for per-process limits•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 1 | -0/+23 |
| * | Enable test timeouts if pytest-timeout is available•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 2 | -1/+2 |
| * | Add initial tests•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 5 | -7/+89 |
| * | Handle EAGAIN/EINTR from fuse_receive_buf()•••Signed-off-by: Michał Górny <mgorny@gentoo.org>
|  Michał Górny | 2025-12-13 | 1 | -1/+1 |