From: Marcio Barbosa Date: Mon, 6 Jun 2016 17:03:54 +0000 (-0300) Subject: sys: retry lsetpag if errno is EINTR X-Git-Tag: upstream/1.8.6_pre1^2~27 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=b86e01577ef992599606acd668271a99b52e4a1b;p=packages%2Fo%2Fopenafs.git sys: retry lsetpag if errno is EINTR The variable errno might be set by some system calls to indicate the reason why the system call in question did not work as expected. If the setpag system call is interrupted by a signal, the value of errno will be EINTR. This value means that setpag did not succeed because it was interrupted. If lsetpag did not succeed and errno is equal to EINTR, try again. Reviewed-on: https://gerrit.openafs.org/12295 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 2ae2a15c9dc9b26eaa15964cc96fdeeb6d82c74c) Change-Id: I58d4aa633e5cadea2bc7b222f68306f07657b754 Reviewed-on: https://gerrit.openafs.org/13975 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Mark Vitale Tested-by: BuildBot Reviewed-by: Stephan Wiesand --- diff --git a/src/afsweb/apache_afs_utils.c b/src/afsweb/apache_afs_utils.c index ba0d919fa..c185c54dd 100644 --- a/src/afsweb/apache_afs_utils.c +++ b/src/afsweb/apache_afs_utils.c @@ -44,7 +44,13 @@ do_pioctl(char *in_buffer, int in_size, char *out_buffer, int out_size, int do_setpag() { - return lsetpag(); + int code; + + do { + code = lsetpag(); + } while (code && errno == EINTR); + + return code; } /* diff --git a/src/kopenafs/kopenafs.c b/src/kopenafs/kopenafs.c index 0a59cc8b4..143c3bb7f 100644 --- a/src/kopenafs/kopenafs.c +++ b/src/kopenafs/kopenafs.c @@ -71,7 +71,13 @@ k_hasafs(void) int k_setpag(void) { - return lsetpag(); + int code; + + do { + code = lsetpag(); + } while (code && errno == EINTR); + + return code; } int diff --git a/src/sys/rmtsysc.c b/src/sys/rmtsysc.c index a66eb8801..a1b250ea6 100644 --- a/src/sys/rmtsysc.c +++ b/src/sys/rmtsysc.c @@ -152,7 +152,10 @@ setpag(void) if (!(conn = rx_connection(&errorcode, "setpag"))) { /* Remote call can't be performed for some reason. * Try the local 'setpag' system call ... */ - errorcode = lsetpag(); + do { + errorcode = lsetpag(); + } while (errorcode && errno == EINTR); + return errorcode; } ngroups = SetClientCreds(&creds, groups);