]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
AsyncConnection: continue to read when meeting EINTR
authorHaomai Wang <haomaiwang@gmail.com>
Wed, 4 May 2016 10:33:29 +0000 (18:33 +0800)
committerHaomai Wang <haomai@xsky.com>
Fri, 6 May 2016 16:29:31 +0000 (00:29 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/AsyncConnection.cc

index d52f4b160c342c5f9dabade0da62245307ffda24..59ec5e0dca6a74f627575acf7f40a3bd5d183f78 100644 (file)
@@ -154,10 +154,14 @@ void AsyncConnection::maybe_start_delay_thread()
  * return 0 means EAGAIN or EINTR */
 ssize_t AsyncConnection::read_bulk(int fd, char *buf, unsigned len)
 {
-  ssize_t nread = ::read(fd, buf, len);
+  ssize_t nread;
+ again:
+  nread = ::read(fd, buf, len);
   if (nread == -1) {
-    if (errno == EAGAIN || errno == EINTR) {
+    if (errno == EAGAIN) {
       nread = 0;
+    } else if (errno == EINTR) {
+      goto again;
     } else {
       ldout(async_msgr->cct, 1) << __func__ << " reading from fd=" << fd
                           << " : "<< strerror(errno) << dendl;