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.
Change-Id: Ibf306d62fc8d2fa9ccb0692f9031c5aa659b2bfe
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>
int
do_setpag()
{
- return lsetpag();
+ int code;
+
+ do {
+ code = lsetpag();
+ } while (code && errno == EINTR);
+
+ return code;
}
/*
int
k_setpag(void)
{
- return lsetpag();
+ int code;
+
+ do {
+ code = lsetpag();
+ } while (code && errno == EINTR);
+
+ return code;
}
int
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);