@@ -615,10 +615,11 @@ [_IPv6Socket release]; #endif [_queries release]; [_TCPQueries release]; [_cache release]; + [_lastNameServers release]; [super dealloc]; } - (OFDictionary *)staticHosts @@ -805,13 +806,23 @@ runLoopMode: runLoopMode]; } - (void)of_cleanUpCache { - void *pool = objc_autoreleasePoolPush(); OFTimeInterval now = [[OFDate date] timeIntervalSince1970]; OFMutableArray *removeList; + + if (_lastNameServers != _settings->_nameServers && + ![_lastNameServers isEqual: _settings->_nameServers]) { + OFArray *old = _lastNameServers; + _lastNameServers = [_settings->_nameServers copy]; + [old release]; + + [_cache removeAllObjects]; + + return; + } if (now - _lastCacheCleanup < 1) return; _lastCacheCleanup = now; @@ -830,12 +841,10 @@ [removeList addObject: query]; } for (OFDNSQuery *query in removeList) [_cache removeObjectForKey: query]; - - objc_autoreleasePoolPop(pool); } - (void)asyncPerformQuery: (OFDNSQuery *)query delegate: (id )delegate { @@ -1106,19 +1115,19 @@ } if (exception != nil) response = nil; + [self of_cleanUpCache]; + if (response != nil) [_cache setObject: [OFPair pairWithFirstObject: [OFDate date] secondObject: response] forKey: context->_query]; else [_cache removeObjectForKey: context->_query]; - [self of_cleanUpCache]; - [context->_delegate resolver: self didPerformQuery: context->_query response: response exception: exception];