Author: mlytwyn Date: Fri Jan 30 03:00:16 2015 New Revision: 38308 URL: http://svn.gna.org/viewcvs/gnustep?rev=38308&view=rev Log: Patch for race condition
Modified: libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m Modified: libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m URL: http://svn.gna.org/viewcvs/gnustep/libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m?rev=38308&r1=38307&r2=38308&view=diff ============================================================================== --- libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m (original) +++ libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m Fri Jan 30 03:00:16 2015 @@ -925,9 +925,13 @@ forMode: NSDefaultRunLoopMode]; } +#if 0 [service->runloop addTimer: service->timer forMode: service->runloopmode]; [service->timer fire]; +#else + DNSServiceProcessResult(_netService); +#endif } else // notify the delegate of the error { @@ -1101,7 +1105,7 @@ } // Prepare query for A and/or AAAA record - errorCode = DNSServiceQueryRecord((DNSServiceRef *) &_netService, + errorCode = DNSServiceQueryRecord((DNSServiceRef *) &_queryRef, flags, interfaceIndex, hosttarget, @@ -1120,15 +1124,76 @@ } else { +#if 0 + // Try delaying a bit for Bonjour to respond... service->timer = [[NSTimer timerWithTimeInterval: INTERVAL target: self selector: @selector(loop:) userInfo: nil repeats: YES] retain]; [service->timer fire]; - + // notify the delegate [self netServiceDidResolveAddress: self]; +#else +#if 0 + while (errorCode == kDNSServiceErr_NoError) + { + errorCode = DNSServiceProcessResult(_queryRef); + } +#else + { + struct timeval tout = { 0, 50 }; + fd_set set; + int sock = DNSServiceRefSockFD(_queryRef);; + + if (-1 != sock) + { + int selcode = 1; + FD_ZERO(&set); + FD_SET(sock, &set); + + while ((selcode = select(sock + 1, &set, (fd_set *) NULL, (fd_set *) NULL, &tout)) == 1) + { + errorCode = DNSServiceProcessResult(_queryRef); + } + if (-1 == selcode) + { + NSLog(@"%s:%d:DNSServiceProcessResult select code: %d errno: %d", __PRETTY_FUNCTION__, __LINE__, selcode, errno); + } + else if (selcode == 0) + { + NSLog(@"%s:%d:DNSServiceProcessResult select code: %d TIMEOUT", __PRETTY_FUNCTION__, __LINE__, selcode); + } + } + } +#endif + +#if 0 + if (kDNSServiceErr_NoError != errorCode) + { + // Notify delegate... + [self netService: self + didNotResolve: CreateError(self, errorCode)]; + [self stopResolving: self]; + } + else +#endif + if (([self addresses] == nil) || ([[self addresses] count] == 0)) + { + // Notify delegate... + [self netService: self + didNotResolve: CreateError(self, errorCode)]; + [self stopResolving: self]; + } + else + { + // notify the delegate + [self netServiceDidResolveAddress: self]; + } + DNSServiceRefDeallocate(_queryRef); + NSLog(@"%s:%d:errorCode: %ld", __PRETTY_FUNCTION__, __LINE__, (long)errorCode); +#endif } } } @@ -1301,6 +1366,7 @@ Service *service; INTERNALTRACE; + NSLog(@"%s:%d:DNSServiceRef: %p", __PRETTY_FUNCTION__, __LINE__, sdRef); service = (Service *) _reserved; @@ -1486,10 +1552,10 @@ if (-1 != sock) { + int selcode; FD_ZERO(&set); FD_SET(sock, &set); - int selcode; selcode = select(sock + 1, &set, (fd_set *) NULL, (fd_set *) NULL, &tout); if (1 == selcode) { @@ -2013,7 +2079,7 @@ DESTROY(service->timeout); } - service->timeout = [[NSTimer scheduledTimerWithTimeInterval: timeout + SHORTTIMEOUT + service->timeout = [[NSTimer timerWithTimeInterval: timeout + SHORTTIMEOUT target: self selector: @selector(stopResolving:) userInfo: nil _______________________________________________ Gnustep-cvs mailing list Gnustep-cvs@gna.org https://mail.gna.org/listinfo/gnustep-cvs