aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-06-10 14:24:06 +0200
committerpespin <pespin@sysmocom.de>2021-06-15 16:29:44 +0000
commitd1b0716242227c9fffb00f02d075f1b218a807e5 (patch)
treee53b7c1775b84e1c1e85344eb5ae75143a5f8879
parentf5b8ed14a9529f7333310299574a80480e78f332 (diff)
ctrl: Support recovering from short write
osmo_wqueue has support for it, so simply handle it correctly in the callback (updating buffer and returning -EAGAIN). Related: OS#5169 Change-Id: I6cbc7ec6ae6832e61cddf4402332ba09b142a7d4
-rw-r--r--src/ctrl/control_if.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index d117fcf2..0a893baf 100644
--- a/src/ctrl/control_if.c
+++ b/src/ctrl/control_if.c
@@ -489,8 +489,14 @@ static int control_write_cb(struct osmo_fd *bfd, struct msgb *msg)
control_close_conn(ccon);
return -EBADF;
}
- if (rc != msg->len)
+ if (rc < 0) {
LOGP(DLCTRL, LOGL_ERROR, "Failed to write message to the CTRL connection.\n");
+ return 0;
+ }
+ if (rc < msg->len) {
+ msgb_pull(msg, rc);
+ return -EAGAIN;
+ }
return 0;
}