nsenter: fix repeat close() operations
It is obvious that the loop at the first place executes at least
twice, and the close() call after the first time always returns
an EBADF error, so move these operations outside the loop that
do not need to be repeated.
@@ -714,12 +714,12 @@ void nsexec(void)
* ready, so we can receive all possible error codes
* generated by children.
*/
- while (!ready) {
- enum sync_t s;
-
syncfd = sync_child_pipe[1];
close(sync_child_pipe[0]);
+ while (!ready) {
+ enum sync_t s;
+
if (read(syncfd, &s, sizeof(s)) != sizeof(s))
bail("failed to sync with child: next state");
@@ -789,13 +789,13 @@ void nsexec(void)
/* Now sync with grandchild. */
+ syncfd = sync_grandchild_pipe[1];
+ close(sync_grandchild_pipe[0]);
+
ready = false;
while (!ready) {
enum sync_t s;
- syncfd = sync_grandchild_pipe[1];
- close(sync_grandchild_pipe[0]);
-
s = SYNC_GRANDCHILD;
if (write(syncfd, &s, sizeof(s)) != sizeof(s)) {
kill(child, SIGKILL);
