continue;
IDState* ids = &state->idStates[dh->id];
- int origFD;
- {
- ReadLock rl(&(ids->lock));
- origFD = ids->origFD;
- }
+ int origFD = ids->origFD;
+
if(origFD < 0) // duplicate
continue;
else
doAvg(g_stats.latencyAvg10000, udiff, 10000);
doAvg(g_stats.latencyAvg1000000, udiff, 1000000);
- {
- WriteLock wl(&(ids->lock));
- if (ids->origFD == origFD)
- ids->origFD = -1;
- }
+ if (ids->origFD == origFD)
+ ids->origFD = -1;
}
return 0;
}
ss->queries++;
unsigned int idOffset = (ss->idOffset++) % ss->idStates.size();
- {
- IDState* ids = &ss->idStates[idOffset];
- WriteLock wl(&ids->lock);
-
- if(ids->origFD < 0) // if we are reusing, no change in outstanding
- ss->outstanding++;
- else {
- ss->reuseds++;
- g_stats.downstreamTimeouts++;
- }
-
- ids->origFD = cs->udpFD;
- ids->age = 0;
- ids->origID = dh->id;
- ids->origRemote = remote;
- ids->sentTime.start();
- ids->qname = qname;
- ids->qtype = qtype;
- ids->origDest.sin4.sin_family=0;
- ids->delayMsec = delayMsec;
- ids->origFlags = origFlags;
- HarvestDestinationAddress(&msgh, &ids->origDest);
+ IDState* ids = &ss->idStates[idOffset];
+ ids->age = 0;
+
+ if(ids->origFD < 0) // if we are reusing, no change in outstanding
+ ss->outstanding++;
+ else {
+ ss->reuseds++;
+ g_stats.downstreamTimeouts++;
}
+ ids->origFD = cs->udpFD;
+ ids->origID = dh->id;
+ ids->origRemote = remote;
+ ids->sentTime.start();
+ ids->qname = qname;
+ ids->qtype = qtype;
+ ids->origDest.sin4.sin_family=0;
+ ids->delayMsec = delayMsec;
+ ids->origFlags = origFlags;
+ HarvestDestinationAddress(&msgh, &ids->origDest);
+
dh->id = idOffset;
len = send(ss->fd, packet, len, 0);
dss->prev.reuseds.store(dss->reuseds.load());
for(IDState& ids : dss->idStates) { // timeouts
- WriteLock wl(&(ids.lock));
if(ids.origFD >=0 && ids.age++ > 2) {
ids.age = 0;
ids.origFD = -1;
struct IDState
{
- IDState() : origFD(-1), delayMsec(0) { origDest.sin4.sin_family = 0; pthread_rwlock_init(&lock, 0);}
+ IDState() : origFD(-1), delayMsec(0) { origDest.sin4.sin_family = 0;}
IDState(const IDState& orig)
{
origFD = orig.origFD;
origDest = orig.origDest;
delayMsec = orig.delayMsec;
age.store(orig.age.load());
- pthread_rwlock_init(&lock, 0);
}
int origFD; // set to <0 to indicate this state is empty // 4
ComboAddress origDest; // 28
StopWatch sentTime; // 16
DNSName qname; // 80
- pthread_rwlock_t lock;
std::atomic<uint16_t> age; // 4
uint16_t qtype; // 2
uint16_t origID; // 2