mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
util: correct retry path in virFileOperation
In virFileOperation, the parent does a fallback to a non-fork attempt if it detects that the child returned EACCES. However, the child was calling _exit(-EACCES), which does _not_ appear as EACCES in the parent. * src/util/util.c (virFileOperation): Correctly pass EACCES from child to parent.
This commit is contained in:
parent
e5f3b90e97
commit
d152f64760
@ -1559,6 +1559,15 @@ parenterror:
|
|||||||
goto childerror;
|
goto childerror;
|
||||||
}
|
}
|
||||||
childerror:
|
childerror:
|
||||||
|
/* ret tracks -errno on failure, but exit value must be positive.
|
||||||
|
* If the child exits with EACCES, then the parent tries again. */
|
||||||
|
/* XXX This makes assumptions about errno being < 255, which is
|
||||||
|
* not true on Hurd. */
|
||||||
|
ret = -ret;
|
||||||
|
if ((ret & 0xff) != ret) {
|
||||||
|
VIR_WARN("unable to pass desired return value %d", ret);
|
||||||
|
ret = 0xff;
|
||||||
|
}
|
||||||
_exit(ret);
|
_exit(ret);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user