Author: stefanbidi
Date: Fri Feb 20 19:56:07 2015
New Revision: 38351

URL: http://svn.gna.org/viewcvs/gnustep?rev=38351&view=rev
Log:
* Source/CFRuntime.c: Do nothing if CFRetain/CFRelease are called on small 
objects.
* Source/GSObjCRuntime.h: Cast to unsigned int to avoid warning

Modified:
    libs/corebase/trunk/ChangeLog
    libs/corebase/trunk/Source/CFRuntime.c
    libs/corebase/trunk/Source/GSObjCRuntime.h

Modified: libs/corebase/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/corebase/trunk/ChangeLog?rev=38351&r1=38350&r2=38351&view=diff
==============================================================================
--- libs/corebase/trunk/ChangeLog       (original)
+++ libs/corebase/trunk/ChangeLog       Fri Feb 20 19:56:07 2015
@@ -1,3 +1,8 @@
+2014-02-20 Stefan Bidigaray <[email protected]>
+       * Source/CFRuntime.c: Do nothing if CFRetain/CFRelease are
+       called on small objects.
+       * Source/GSObjCRuntime.h: Cast to unsigned int to avoid warning.
+
 2014-02-19 Stefan Bidigaray <[email protected]>
        * Source/GSObjCRuntime.h: Check for small objects.
 

Modified: libs/corebase/trunk/Source/CFRuntime.c
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/corebase/trunk/Source/CFRuntime.c?rev=38351&r1=38350&r2=38351&view=diff
==============================================================================
--- libs/corebase/trunk/Source/CFRuntime.c      (original)
+++ libs/corebase/trunk/Source/CFRuntime.c      Fri Feb 20 19:56:07 2015
@@ -348,15 +348,20 @@
 void
 CFRelease (CFTypeRef cf)
 {
-  CF_OBJC_FUNCDISPATCHV (CFGetTypeID (cf), void, cf, "release");
-
-  if (!((CFRuntimeBase *) cf)->_flags.ro)
-    {
-      CFIndex result = GSAtomicDecrementCFIndex (&(((obj) cf)[-1].retained));
-      if (result < 0)
+#if defined (OBJC_SMALL_OBJECT_MASK)
+  if (((unsigned long)cf & OBJC_SMALL_OBJECT_MASK) == 0)
+#endif
+    {
+      CF_OBJC_FUNCDISPATCHV (CFGetTypeID (cf), void, cf, "release");
+
+      if (!((CFRuntimeBase *) cf)->_flags.ro)
         {
-          assert (result == -1);
-          GSRuntimeDeallocateInstance (cf);
+          CFIndex result = GSAtomicDecrementCFIndex (&(((obj) 
cf)[-1].retained));
+          if (result < 0)
+            {
+              assert (result == -1);
+              GSRuntimeDeallocateInstance (cf);
+            }
         }
     }
 }
@@ -364,14 +369,18 @@
 CFTypeRef
 CFRetain (CFTypeRef cf)
 {
-  CF_OBJC_FUNCDISPATCHV (CFGetTypeID (cf), CFTypeRef, cf, "retain");
-
-  if (!((CFRuntimeBase *) cf)->_flags.ro)
-    {
-      CFIndex result = GSAtomicIncrementCFIndex (&(((obj) cf)[-1].retained));
-      assert (result < INT_MAX);
-    }
-
+#if defined (OBJC_SMALL_OBJECT_MASK)
+  if (((unsigned long)cf & OBJC_SMALL_OBJECT_MASK) == 0)
+#endif
+    {
+      CF_OBJC_FUNCDISPATCHV (CFGetTypeID (cf), CFTypeRef, cf, "retain");
+
+      if (!((CFRuntimeBase *) cf)->_flags.ro)
+        {
+          CFIndex result = GSAtomicIncrementCFIndex (&(((obj) 
cf)[-1].retained));
+          assert (result < INT_MAX);
+        }
+    }
   return cf;
 }
 

Modified: libs/corebase/trunk/Source/GSObjCRuntime.h
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/corebase/trunk/Source/GSObjCRuntime.h?rev=38351&r1=38350&r2=38351&view=diff
==============================================================================
--- libs/corebase/trunk/Source/GSObjCRuntime.h  (original)
+++ libs/corebase/trunk/Source/GSObjCRuntime.h  Fri Feb 20 19:56:07 2015
@@ -35,8 +35,6 @@
 
 GS_PRIVATE void CFTypeReleaseCallBack (CFAllocatorRef alloc, const void 
*value);
 
-
-
 #if HAVE_LIBOBJC || HAVE_LIBOBJC2
 
 #define BOOL OBJC_BOOL
@@ -57,10 +55,9 @@
 CF_IS_OBJC (CFTypeID typeID, const void *obj)
 {
 #if defined(OBJC_SMALL_OBJECT_MASK)
-  return (obj && ((obj & OBJC_SMALL_OBJECT_MASK) != 0
-                  || (typeID >= __CFRuntimeClassTableCount
-                      || object_getClass ((id) obj) !=
-                      __CFISAForTypeID (typeID))));
+  return (obj && (((unsigned long)obj & OBJC_SMALL_OBJECT_MASK) != 0
+                  || typeID >= __CFRuntimeClassTableCount
+                  || object_getClass ((id) obj) != __CFISAForTypeID (typeID)));
 #else
   return (obj && (typeID >= __CFRuntimeClassTableCount
                   || object_getClass ((id) obj) != __CFISAForTypeID (typeID)));


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

Reply via email to