projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use a mutex to allow the TAP reader to process packets faster on Windows.
[tinc]
/
src
/
net.c
diff --git
a/src/net.c
b/src/net.c
index
c893f1e
..
82b0ede
100644
(file)
--- a/
src/net.c
+++ b/
src/net.c
@@
-149,7
+149,8
@@
static int build_fdset(fd_set *readset, fd_set *writeset)
max = listen_socket[i].udp;
}
max = listen_socket[i].udp;
}
- FD_SET(device_fd, readset);
+ if(device_fd >= 0)
+ FD_SET(device_fd, readset);
if(device_fd > max)
max = device_fd;
if(device_fd > max)
max = device_fd;
@@
-294,7
+295,7
@@
static void check_network_activity(fd_set * readset, fd_set * writeset)
cp();
/* check input from kernel */
cp();
/* check input from kernel */
- if(FD_ISSET(device_fd, readset)) {
+ if(
device_fd >= 0 &&
FD_ISSET(device_fd, readset)) {
if(read_packet(&packet)) {
packet.priority = 0;
route(myself, &packet);
if(read_packet(&packet)) {
packet.priority = 0;
route(myself, &packet);
@@
-378,7
+379,13
@@
int main_loop(void)
maxfd = build_fdset(&readset, &writeset);
maxfd = build_fdset(&readset, &writeset);
+#ifdef HAVE_MINGW
+ LeaveCriticalSection(&mutex);
+#endif
r = select(maxfd + 1, &readset, &writeset, NULL, &tv);
r = select(maxfd + 1, &readset, &writeset, NULL, &tv);
+#ifdef HAVE_MINGW
+ EnterCriticalSection(&mutex);
+#endif
if(r < 0) {
if(errno != EINTR && errno != EAGAIN) {
if(r < 0) {
if(errno != EINTR && errno != EAGAIN) {