Hello again..

Mea culpa... Attached the wrong files here are the correct onces....

Roland

Roland Schwingel wrote:

Hi...

A few days ago we encountered some very odd and strange crashes on linux when using gnustep heavily multithreaded. We found that there was no thread registration/unregistration for it in cleanup_names(). After adding them everything runs fine now.

The patches for the classes are attached in this email..

Hope they can be applied.

Roland

PS: On may,12 I submitted a patch for NSTimeZone to make it working on non english windows system. Haven't heard anything about it till now. Is there anything wrong with it?



--- NSMessagePort.m     2004-05-17 10:43:55.000000000 +0200
+++ NSMessagePort.m.new 2004-05-17 10:44:33.000000000 +0200
@@ -1152,10 +1152,15 @@
 
 static void clean_up_sockets(void)
 {
+  NSAutoreleasePool *arp = nil;
+  
   NSMessagePort *port;
   NSData *name;
   NSMapEnumerator mEnum;
 
+  if (GSRegisterCurrentThread())
+               RECREATE_AUTORELEASE_POOL(arp);
+
   mEnum = NSEnumerateMapTable(messagePortMap);
   while (NSNextMapEnumeratorPair(&mEnum, (void *)&name, (void *)&port))
     {
@@ -1163,6 +1168,12 @@
        unlink([name bytes]);
     }
   NSEndMapTableEnumeration(&mEnum);
+
+  if (arp)
+  {
+         DESTROY(arp);
+     GSUnregisterCurrentThread();                
+  }      
 }
 
 
--- NSMessagePortNameServer.m   2004-05-17 10:44:03.000000000 +0200
+++ NSMessagePortNameServer.m.new       2004-05-17 10:44:46.000000000 +0200
@@ -9,6 +9,7 @@
 #include "Foundation/NSPort.h"
 #include "Foundation/NSFileManager.h"
 #include "Foundation/NSValue.h"
+#include "Foundation/NSThread.h"
 
 #include <sys/stat.h>
 #include <unistd.h>
@@ -54,7 +55,11 @@
 
 static void clean_up_names(void)
 {
-  CREATE_AUTORELEASE_POOL(arp);
+       NSAutoreleasePool *arp = nil;
+       
+       if (GSRegisterCurrentThread())
+               RECREATE_AUTORELEASE_POOL(arp);
+               
   NSMapEnumerator mEnum;
   NSMessagePort *port;
   NSString *name;
@@ -65,7 +70,12 @@
       [defaultServer removePort: port];
     }
   NSEndMapTableEnumeration(&mEnum);
-  DESTROY(arp);
+
+  if (arp)
+  {
+         DESTROY(arp);
+     GSUnregisterCurrentThread();                
+  }      
 }
 
 
_______________________________________________
Bug-gnustep mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-gnustep

Reply via email to