On 04/26/2011 09:19 AM, Laine Stump wrote:
>>> do {
>>> - ret = recvmsg(pair[0],&msg, 0);
>>> + ret = recvfd(pair[0], 0);
>>> } while (ret< 0&& errno == EINTR);
> ret == -1 and errno == EACCES on failure to transfer fd...
>
>> if (!WIFEXITED(status) || (ret =
-WEXITSTATUS(status)) ==
>> -EACCES ||
>> fd == -1) {
>> /* fall back to the simpler method, which works better in
>> * some cases */
>> return virFileOpenAsNoFork(path, openflags, mode, uid,
>> gid, flags);
>> }
> so this uses the fallback code, regardless of child exit status, and we
> also ensured that the child got reaped.
>
>> What if errno == EACCES? Will we be getting all the error recovery we
>> need in the caller?
> Yes.
Another way to look at it - for all failures except EACCES, the child is
immediately reaped and the overall function failed; with EACCES, we
still want to try the non-forking fallback.
Okay. In that case, ACK.
Thanks for the review; pushed.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org