Rebase against 002af352fac43d170aad216bf15098b27555539a.

This commit is contained in:
Sebastian Lackner
2016-08-30 20:44:42 +02:00
parent 39c7e02819
commit 8ca9f08b92
3 changed files with 5 additions and 92 deletions

View File

@@ -1,85 +0,0 @@
From c3170561ea6c0de42ae71925e31e08941e1b96dc Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 31 Jul 2016 00:03:02 +0200
Subject: server: Workaround duplicate condition warning of GCC 6.
---
server/request.c | 13 ++++++++++---
server/sock.c | 9 ++++++++-
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/server/request.c b/server/request.c
index 597bf88..483884b 100644
--- a/server/request.c
+++ b/server/request.c
@@ -220,6 +220,13 @@ const void *get_req_data_after_objattr( const struct object_attributes *attr, da
return ptr;
}
+static inline int should_retry( int err )
+{
+ if (err == EWOULDBLOCK) return 1;
+ if (err == EAGAIN) return 1;
+ return 0;
+}
+
/* write the remaining part of the reply */
void write_reply( struct thread *thread )
{
@@ -241,7 +248,7 @@ void write_reply( struct thread *thread )
}
if (errno == EPIPE)
kill_thread( thread, 0 ); /* normal death */
- else if (errno != EWOULDBLOCK && errno != EAGAIN)
+ else if (!should_retry( errno ))
fatal_protocol_error( thread, "reply write: %s\n", strerror( errno ));
}
@@ -368,7 +375,7 @@ error:
kill_thread( thread, 0 );
else if (ret > 0)
fatal_protocol_error( thread, "partial read %d\n", ret );
- else if (errno != EWOULDBLOCK && errno != EAGAIN)
+ else if (!should_retry( errno ))
fatal_protocol_error( thread, "read: %s\n", strerror( errno ));
}
@@ -449,7 +456,7 @@ int receive_fd( struct process *process )
}
else
{
- if (errno != EWOULDBLOCK && errno != EAGAIN)
+ if (!should_retry( errno ))
{
fprintf( stderr, "Protocol error: process %04x: ", process->id );
perror( "recvmsg" );
diff --git a/server/sock.c b/server/sock.c
index dc10d2a..4f76163 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -1065,6 +1065,13 @@ static void ifchange_wake_up( struct object *obj, unsigned int status )
}
}
+static inline int should_retry( int err )
+{
+ if (err == EWOULDBLOCK) return 1;
+ if (err == EAGAIN) return 1;
+ return 0;
+}
+
static void ifchange_poll_event( struct fd *fd, int event )
{
struct object *ifchange = get_fd_user( fd );
@@ -1075,7 +1082,7 @@ static void ifchange_poll_event( struct fd *fd, int event )
r = recv( get_unix_fd(fd), buffer, sizeof(buffer), MSG_DONTWAIT );
if (r < 0)
{
- if (errno == EWOULDBLOCK || errno == EAGAIN)
+ if (should_retry( errno ))
return; /* retry when poll() says the socket is ready */
status = sock_get_ntstatus( errno );
}
--
2.9.0