From 9c0da2f2091bc5edb00456d6fcca8f9370cba271 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sun, 14 Apr 2019 21:10:24 +0200 Subject: [PATCH] Wrap all access to the forwarded and clients structures in locks. This is sometimes a bit cumbersome, however, it is necessary as we cannot completely lock the routines because this would prevent DNS resolution from being able to work Signed-off-by: DL6ER --- resolve.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/resolve.c b/resolve.c index 33a998618..251c1263a 100644 --- a/resolve.c +++ b/resolve.c @@ -110,12 +110,18 @@ void resolveClients(bool onlynew) // If onlynew flag is set, we will only resolve new clients // If not, we will try to re-resolve all known clients - if(onlynew && !clients[clientID].new) + lock_shm(); + bool newlock = clients[clientID].new; + unlock_shm(); + if(onlynew && !newlock) continue; // Obtain/update hostname of this client + lock_shm(); size_t oldnamepos = clients[clientID].namepos; - size_t newnamepos = resolveAndAddHostname(clients[clientID].ippos, oldnamepos); + size_t ippos = clients[clientID].ippos; + unlock_shm(); + size_t newnamepos = resolveAndAddHostname(ippos, oldnamepos); if(newnamepos != oldnamepos) { @@ -143,12 +149,18 @@ void resolveForwardDestinations(bool onlynew) // If onlynew flag is set, we will only resolve new upstream destinations // If not, we will try to re-resolve all known upstream destinations - if(onlynew && !forwarded[forwardID].new) + lock_shm(); + bool newflag = forwarded[forwardID].new; + unlock_shm(); + if(onlynew && !newflag) continue; // Obtain/update hostname of this client + lock_shm(); size_t oldnamepos = forwarded[forwardID].namepos; - size_t newnamepos = resolveAndAddHostname(forwarded[forwardID].ippos, oldnamepos); + size_t ippos = forwarded[forwardID].ippos; + unlock_shm(); + size_t newnamepos = resolveAndAddHostname(ippos, oldnamepos); if(newnamepos != oldnamepos) {