]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
sys: retry lsetpag if errno is EINTR
authorMarcio Barbosa <mbarbosa@sinenomine.net>
Mon, 6 Jun 2016 17:03:54 +0000 (14:03 -0300)
committerStephan Wiesand <stephan.wiesand@desy.de>
Sun, 9 Feb 2020 17:45:37 +0000 (12:45 -0500)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 2ae2a15c9dc9b26eaa15964cc96fdeeb6d82c74c)

Change-Id: I58d4aa633e5cadea2bc7b222f68306f07657b754
Reviewed-on: https://gerrit.openafs.org/13975
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/afsweb/apache_afs_utils.c
src/kopenafs/kopenafs.c
src/sys/rmtsysc.c

index ba0d919fa7fbc0c66cddb6c63041b3252ac2a971..c185c54dd0afc8b3b055b2a735a622e1f8b99ee3 100644 (file)
@@ -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;
 }
 
 /*
index 0a59cc8b42ab8db867b3fd78eaa3c39bbc126ef1..143c3bb7f18dfee31b1427a46cf0d240dad69125 100644 (file)
@@ -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
index a66eb8801bb1500b65de92b491e4a3998089b294..a1b250ea62180869bdc57f3fca3b49a5edbfd4a6 100644 (file)
@@ -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);