diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-06-10 14:24:06 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2021-06-15 16:29:44 +0000 |
commit | d1b0716242227c9fffb00f02d075f1b218a807e5 (patch) | |
tree | e53b7c1775b84e1c1e85344eb5ae75143a5f8879 /src | |
parent | f5b8ed14a9529f7333310299574a80480e78f332 (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
Diffstat (limited to 'src')
-rw-r--r-- | src/ctrl/control_if.c | 8 |
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; } |