Author: mlytwyn
Date: Thu Jan 29 19:43:39 2015
New Revision: 38307

URL: http://svn.gna.org/viewcvs/gnustep?rev=38307&view=rev
Log:
Minor fixes to mDNS

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=38307&r1=38306&r2=38307&view=diff
==============================================================================
--- libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m      
(original)
+++ libs/base/branches/gnustep_testplant_branch/Source/GSMDNSNetServices.m      
Thu Jan 29 19:43:39 2015
@@ -163,6 +163,9 @@
 //
 // Private
 //
+@interface GSMDNSNetService (Private)
+- (void)stopResolving:(id)sender;
+@end
 
 //
 // Private Interface
@@ -317,7 +320,20 @@
       _netServiceBrowser = NULL;
     }
     
-    [browser->services removeAllObjects];
+    {
+      id            key;
+      NSEnumerator *iter = [browser->services keyEnumerator];
+      
+      while ((key = [iter nextObject]))
+      {
+        GSMDNSNetService *service = [browser->services objectForKey: key];
+        
+        [service stopMonitoring];
+        [service stopResolving: self];
+        [service stop];
+        [browser->services removeObjectForKey: key];
+      }
+    }
   }
   UNLOCK(browser);
 }
@@ -958,7 +974,6 @@
       DESTROY(service->timer);
     }
     
-#if 0
     // Cocoa leaves this information intact on stop/cleanup...
     if (_netService)
     {
@@ -966,6 +981,7 @@
       _netService = NULL;
     }
     
+#if 0
     [service->info removeAllObjects];
     [service->foundAddresses removeAllObjects];
 #endif
@@ -987,17 +1003,20 @@
   
   service = (Service *) _reserved;
   
-  LOCK(service);
-  {
-    [service->timeout invalidate];
-    DESTROY(service->timeout);
-    [service->timer invalidate];
-    DESTROY(service->timer);
-
-    [self netService: self
-       didNotResolve: CreateError(self, NSNetServicesTimeoutError)];
-  }
-  UNLOCK(service);
+  if (service->timeout)
+  {
+    LOCK(service);
+    {
+      [service->timeout invalidate];
+      DESTROY(service->timeout);
+      [service->timer invalidate];
+      DESTROY(service->timer);
+
+      [self netService: self
+         didNotResolve: CreateError(self, NSNetServicesTimeoutError)];
+    }
+    UNLOCK(service);
+  }
 }
 
 /**
@@ -1019,7 +1038,7 @@
   Service      *service;
   
   INTERNALTRACE;
-  
+
   service = (Service *) _reserved;
   
   LOCK(service);
@@ -1092,15 +1111,22 @@
                                         self);
       
       // No error? Then create a new timer
-      if (kDNSServiceErr_NoError == errorCode)
+      if (kDNSServiceErr_NoError != errorCode)
+      {
+        // Notify delegate...
+        [self netService: self
+           didNotResolve: CreateError(self, errorCode)];
+        [self stopResolving: self];
+      }
+      else
            {
-             service->timer = [[NSTimer timerWithTimeInterval: INTERVAL
+        service->timer = [[NSTimer timerWithTimeInterval: INTERVAL
                                                   target: self
                                                 selector: @selector(loop:)
                                                 userInfo: nil
                                                  repeats: YES] retain];
-             [service->timer fire];
-        
+        [service->timer fire];
+
         // notify the delegate
         [self netServiceDidResolveAddress: self];
            }
@@ -1275,7 +1301,7 @@
   Service      *service;
   
   INTERNALTRACE;
-  
+
   service = (Service *) _reserved;
   
   LOCK(service);
@@ -1457,18 +1483,24 @@
   DNSServiceErrorType  err = kDNSServiceErr_NoError;
   
   sock = DNSServiceRefSockFD(_netService);
-  
+
   if (-1 != sock)
   {
     FD_ZERO(&set);
     FD_SET(sock, &set);
     
-    if (1 == select(sock + 1, &set, (fd_set *) NULL, (fd_set *) NULL, &tout))
+    int selcode;
+    selcode = select(sock + 1, &set, (fd_set *) NULL, (fd_set *) NULL, &tout);
+    if (1 == selcode)
     {
       err = DNSServiceProcessResult(_netService);
     }
-  }
-  
+    else
+    {
+      NSLog(@"%s:%d:DNSServiceProcessResult select code: %d errno: %d", 
__PRETTY_FUNCTION__, __LINE__, selcode, errno);
+    }
+  }
+
   if (kDNSServiceErr_NoError != err)
   {
     Service    *service;
@@ -2017,13 +2049,16 @@
   
   service = (Service *) _reserved;
   
-  LOCK(service);
-  {
-    [self cleanup];
-    
-    [self netServiceDidStop: self];
-  }
-  UNLOCK(service);
+  if (service->timer)
+  {
+    LOCK(service);
+    {
+      [self cleanup];
+      
+      [self netServiceDidStop: self];
+    }
+    UNLOCK(service);
+  }
 }
 
 /**
@@ -2342,12 +2377,12 @@
   Service      *service;
  
   INTERNALTRACE;
-  [self setDelegate: nil];
   service = (Service *) _reserved;
   {
     LOCK(service);
     {
       [self stopMonitoring];
+      [self stopResolving: self];
       [self cleanup];
       
       DESTROY(service->info);
@@ -2359,6 +2394,7 @@
     
     free(service);
   }
+  [self setDelegate: nil];
   [super dealloc];
 }
 


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to