commit: 411ec16fd4f149da43dd0121649db3943d724088
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 13 13:09:54 2025 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Dec 13 13:09:54 2025 +0000
URL: https://gitweb.gentoo.org/proj/steve.git/commit/?id=411ec16f
Fix CUSE read error handling
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
steve.cxx | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/steve.cxx b/steve.cxx
index b2ef505..d2a20da 100644
--- a/steve.cxx
+++ b/steve.cxx
@@ -88,6 +88,7 @@ struct steve_process {
};
struct steve_state {
+ int retval{0};
const char *dev_name{"steve"};
bool verbose;
uint64_t jobs;
@@ -722,8 +723,16 @@ static void steve_handle_sigusr1(evutil_socket_t, short,
void *userdata) {
static void steve_handle_cuse(evutil_socket_t, short, void *userdata) {
steve_state *state = static_cast<steve_state *>(userdata);
- if (fuse_session_receive_buf(state->session, &state->buf) > 0)
- fuse_session_process_buf(state->session, &state->buf);
+ int rd = fuse_session_receive_buf(state->session, &state->buf);
+ if (rd <= 0) {
+ state->retval = 1;
+ perror("Reading from CUSE failed");
+ if (event_base_loopbreak(state->evb) == -1) {
+ std::print(stderr, "event_base_loopbreak() failed,
forcing hard exit");
+ exit(1);
+ }
+ }
+ fuse_session_process_buf(state->session, &state->buf);
}
static void steve_handle_recheck(evutil_socket_t, short, void *userdata) {
@@ -960,5 +969,5 @@ int main(int argc, char **argv)
event_base_dispatch(evb.get());
fuse_session_unmount(session.get());
- return 0;
+ return state.retval;
}