aboutsummaryrefslogtreecommitdiff
path: root/chardev
diff options
context:
space:
mode:
authorlinzhecheng <linzhecheng@huawei.com>2018-05-29 10:52:40 +0800
committerDaniel P. Berrangé <berrange@redhat.com>2018-06-28 13:36:59 +0100
commit9fc53a10f81d3a9027b23fa810147d21be29e614 (patch)
treeafd60bde8700bc77267cb3e5f9581c3710c3b407 /chardev
parent00928a421d47f49691cace1207481b7aad31b1f1 (diff)
socket: don't free msgfds if error equals EAGAIN
If we see EAGAIN, no data was sent over the socket, so we still have to retry sending of msgfds next time. Signed-off-by: linzhecheng <linzhecheng@huawei.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'chardev')
-rw-r--r--chardev/char-socket.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index 159e69c3b1..17519ec589 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -134,8 +134,8 @@ static int tcp_chr_write(Chardev *chr, const uint8_t *buf, int len)
s->write_msgfds,
s->write_msgfds_num);
- /* free the written msgfds, no matter what */
- if (s->write_msgfds_num) {
+ /* free the written msgfds in any cases other than errno==EAGAIN */
+ if (EAGAIN != errno && s->write_msgfds_num) {
g_free(s->write_msgfds);
s->write_msgfds = 0;
s->write_msgfds_num = 0;