Author: rfm
Date: Thu Apr 28 22:35:00 2016
New Revision: 39706

URL: http://svn.gna.org/viewcvs/gnustep?rev=39706&view=rev
Log:
Add check and exception for repeated deallocation of a pool.

Modified:
    libs/base/trunk/ChangeLog
    libs/base/trunk/Source/NSAutoreleasePool.m

Modified: libs/base/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=39706&r1=39705&r2=39706&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog   (original)
+++ libs/base/trunk/ChangeLog   Thu Apr 28 22:35:00 2016
@@ -1,3 +1,9 @@
+2016-04-28  Richard Frith-Macdonald <[email protected]>
+
+       * Source/NSAutoreleasePool.m:
+       Check for a pool being deallocated when it has already been
+       deallocated (and raise an exception).
+
 2016-04-23  Marcus Mueller <[email protected]>
 
        * Source/GSAvahiNetService.m: Avahi-based NSNetServices did crash
@@ -6,12 +12,12 @@
 
 2016-04-08  Richard Frith-Macdonald <[email protected]>
 
-       * Source/NSUserDefaults.m
+       * Source/NSUserDefaults.m:
        Remove redundant code.  Log domain names when debug is enabled.
 
 2016-04-08 Riccardo Mottola <[email protected]>
 
-       * Source/NSUserDefaults.m
+       * Source/NSUserDefaults.m:
        Skip nil domains explicitely and do not use nil values to look them up.
 
 2016-04-04  Niels Grewe <[email protected]>

Modified: libs/base/trunk/Source/NSAutoreleasePool.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSAutoreleasePool.m?rev=39706&r1=39705&r2=39706&view=diff
==============================================================================
--- libs/base/trunk/Source/NSAutoreleasePool.m  (original)
+++ libs/base/trunk/Source/NSAutoreleasePool.m  Thu Apr 28 22:35:00 2016
@@ -295,9 +295,14 @@
 + (id) allocWithZone: (NSZone*)zone
 {
   struct autorelease_thread_vars *tv = ARP_THREAD_VARS;
+
   if (tv->pool_cache_count)
-    return pop_pool_from_cache (tv);
-
+    {
+      NSAutoreleasePool *p = pop_pool_from_cache (tv);
+
+      NSAssert(++(p->_released_count) == 0, @"corrupted pool in cache");
+      return p;
+    }
   return NSAllocateObject (self, 0, zone);
 }
 
@@ -720,6 +725,13 @@
       _parent = nil;
     }
 
+  if (_released_count-- != 0)
+    {
+      _released_count++;
+      [NSException raise: NSInternalInconsistencyException
+                  format: @"NSAutoreleasePool -dealloc of deallocated pool"];
+    }
+
   /* Don't deallocate ourself, just save us for later use. */
   push_pool_to_cache (tv, self);
   GSNOSUPERDEALLOC;


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

Reply via email to