summaryrefslogtreecommitdiff
path: root/osdep/MacEthernetTap.cpp
diff options
context:
space:
mode:
authorGrant Limberg <grant.limberg@zerotier.com>2018-11-13 16:00:17 -0800
committerGrant Limberg <grant.limberg@zerotier.com>2018-11-13 16:00:17 -0800
commit01e6df4d46df280b3ad2ae158cb87b5ee98f10d7 (patch)
tree231f4ef754a3871456f72895a9ae4899bb4588b8 /osdep/MacEthernetTap.cpp
parent882b03436d7b40a788f060e0d83a4027f86e73ef (diff)
parent690bd933d52c7dbbcddde7c0aff30f7fee91a6d9 (diff)
downloadinfinitytier-01e6df4d46df280b3ad2ae158cb87b5ee98f10d7.tar.gz
infinitytier-01e6df4d46df280b3ad2ae158cb87b5ee98f10d7.zip
Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev
Diffstat (limited to 'osdep/MacEthernetTap.cpp')
-rw-r--r--osdep/MacEthernetTap.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/osdep/MacEthernetTap.cpp b/osdep/MacEthernetTap.cpp
index 92df2f31..fb3e3a75 100644
--- a/osdep/MacEthernetTap.cpp
+++ b/osdep/MacEthernetTap.cpp
@@ -147,7 +147,7 @@ MacEthernetTap::MacEthernetTap(
_agentStdin2 = agentStdin[0];
_agentStdout2 = agentStdout[1];
_agentStderr2 = agentStderr[1];
- long apid = (long)vfork();
+ long apid = (long)fork();
if (apid < 0) {
throw std::runtime_error("fork failed");
} else if (apid == 0) {
@@ -155,10 +155,13 @@ MacEthernetTap::MacEthernetTap(
::dup2(agentStdout[1],STDOUT_FILENO);
::dup2(agentStderr[1],STDERR_FILENO);
::close(agentStdin[0]);
+ ::close(agentStdin[1]);
+ ::close(agentStdout[0]);
::close(agentStdout[1]);
+ ::close(agentStderr[0]);
::close(agentStderr[1]);
::execl(agentPath.c_str(),agentPath.c_str(),devnostr,ethaddr,mtustr,metricstr,(char *)0);
- ::exit(-1);
+ ::_exit(-1);
} else {
_agentPid = apid;
}
@@ -284,7 +287,9 @@ void MacEthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType,co
iov[1].iov_len = 15;
iov[2].iov_base = const_cast<void *>(data);
iov[2].iov_len = len;
+ _putLock.lock();
writev(_agentStdin,iov,3);
+ _putLock.unlock();
}
}
@@ -356,8 +361,8 @@ void MacEthernetTap::threadMain()
const int nfds = std::max(std::max(_shutdownSignalPipe[0],_agentStdout),_agentStderr) + 1;
long agentReadPtr = 0;
- fcntl(_agentStdout,F_SETFL,O_NONBLOCK);
- fcntl(_agentStderr,F_SETFL,O_NONBLOCK);
+ fcntl(_agentStdout,F_SETFL,fcntl(_agentStdout,F_GETFL)|O_NONBLOCK);
+ fcntl(_agentStderr,F_SETFL,fcntl(_agentStderr,F_GETFL)|O_NONBLOCK);
FD_ZERO(&readfds);
FD_ZERO(&nullfds);
@@ -393,8 +398,6 @@ void MacEthernetTap::threadMain()
break;
}
}
- } else {
- break;
}
}
if (FD_ISSET(_agentStderr,&readfds)) {