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