You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
952 B
34 lines
952 B
7 years ago
|
diff -up nfs-utils-1.3.0/support/nfs/rpc_socket.c.orig nfs-utils-1.3.0/support/nfs/rpc_socket.c
|
||
|
--- nfs-utils-1.3.0/support/nfs/rpc_socket.c.orig 2014-03-25 11:12:07.000000000 -0400
|
||
|
+++ nfs-utils-1.3.0/support/nfs/rpc_socket.c 2016-04-28 11:37:53.694236000 -0400
|
||
|
@@ -215,7 +215,7 @@ static int nfs_connect_nb(const int fd,
|
||
|
* use it later.
|
||
|
*/
|
||
|
ret = connect(fd, sap, salen);
|
||
|
- if (ret < 0 && errno != EINPROGRESS) {
|
||
|
+ if (ret < 0 && errno != EINPROGRESS && errno != EINTR) {
|
||
|
ret = -1;
|
||
|
goto done;
|
||
|
}
|
||
|
@@ -227,10 +227,16 @@ static int nfs_connect_nb(const int fd,
|
||
|
FD_ZERO(&rset);
|
||
|
FD_SET(fd, &rset);
|
||
|
|
||
|
- ret = select(fd + 1, NULL, &rset, NULL, timeout);
|
||
|
- if (ret <= 0) {
|
||
|
- if (ret == 0)
|
||
|
- errno = ETIMEDOUT;
|
||
|
+ while ((ret = select(fd + 1, NULL, &rset, NULL, timeout)) < 0) {
|
||
|
+ if (errno != EINTR) {
|
||
|
+ ret = -1;
|
||
|
+ goto done;
|
||
|
+ } else {
|
||
|
+ continue;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ if (ret == 0) {
|
||
|
+ errno = ETIMEDOUT;
|
||
|
ret = -1;
|
||
|
goto done;
|
||
|
}
|