summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2026-08-16 18:15:26 +0000
committerSander Vrijders <sander@ouroboros.rocks>2026-08-31 08:31:45 +0200
commit63fc20aee272482a337513786e83f82c2e0e4c99 (patch)
tree97eb2037b97c146dee536f75f7c384424f389679 /src
parentc88151f46719816afed7fb08c2dafce696595bdd (diff)
downloadouroboros-63fc20aee272482a337513786e83f82c2e0e4c99.tar.gz
ouroboros-63fc20aee272482a337513786e83f82c2e0e4c99.zip
ipcpd: Don't drop DT flows on -EAGAIN
The scheduler was dropping DT flows when they were momentarily empty (-EAGAIN). Now it will continue to the next flow and only drop on hard errors. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src')
-rw-r--r--src/ipcpd/unicast/psched.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/ipcpd/unicast/psched.c b/src/ipcpd/unicast/psched.c
index 01c4b066..dce85120 100644
--- a/src/ipcpd/unicast/psched.c
+++ b/src/ipcpd/unicast/psched.c
@@ -135,6 +135,7 @@ static uint64_t dsched_serve(struct dsched * d,
uint64_t dmin = 0;
size_t i;
int fd;
+ int ret;
time_t wait;
bool served;
@@ -151,7 +152,13 @@ static uint64_t dsched_serve(struct dsched * d,
continue;
}
- if (sched->read(fd, &spb) < 0) {
+ ret = sched->read(fd, &spb);
+ if (ret == -EAGAIN) { /* empty now, keep it */
+ ++i;
+ continue;
+ }
+
+ if (ret < 0) {
dsched_untrack(d, fd);
continue;
}