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
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs