From: <ho...@us...> - 2016-07-15 21:59:42
|
Revision: 20957 http://sourceforge.net/p/bibdesk/svn/20957 Author: hofman Date: 2016-07-15 21:59:39 +0000 (Fri, 15 Jul 2016) Log Message: ----------- Remove FVObject implementation. Objc internals for reference counting have become too fragile to mess with, using undocumented private methods that require overriding Modified Paths: -------------- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.h trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.m Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.h =================================================================== --- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.h 2016-07-15 20:55:11 UTC (rev 20956) +++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.h 2016-07-15 21:59:39 UTC (rev 20957) @@ -38,13 +38,5 @@ #import <Foundation/Foundation.h> -/** @internal @brief Base object. - - Use for objects that are retained/released frequently, since inline reference counting can be quite a bit faster than the global hashtable lookups. */ -@interface FVObject : NSObject -{ -@private - volatile uint32_t _rc; -} - +@interface FVObject : NSObject @end Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.m =================================================================== --- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.m 2016-07-15 20:55:11 UTC (rev 20956) +++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVObject.m 2016-07-15 21:59:39 UTC (rev 20957) @@ -37,71 +37,6 @@ */ #import "FVObject.h" -#import "FVUtilities.h" -#import <Foundation/NSDebug.h> -#import <libkern/OSAtomic.h> -extern bool __CFOASafe; -static bool __FVOASafe = false; -#define RETAIN_WARNING_THRESHOLD 1000000 - @implementation FVObject - -+ (void)initialize -{ - FVINITIALIZE(FVObject); - - // used by CF and liboainject; Omni uses NSKeepAllocationStatistics, but the header says that's unused - if (&__CFOASafe) __FVOASafe = __CFOASafe; -} - -// _rc is initialized to zero in allocWithZone:, so avoid overriding -init by counting from 0. - -#if DEBUG -static void _FVObjectError(NSString *format, ...) -{ - va_list list; - va_start(list, format); - FVLogv(format, list); - va_end(list); -} -#endif - -- (oneway void)release -{ - // call NSRecordAllocationEvent before the event, since it may call retainCount (and we may dealloc) - if (__builtin_expect(__FVOASafe, 0)) NSRecordAllocationEvent(NSObjectInternalRefDecrementedEvent, self); - - if (__builtin_expect(0 == _rc, 0)) { - [self dealloc]; - } - else { - int32_t rc = OSAtomicDecrement32Barrier((volatile int32_t *)&_rc); -#if DEBUG - if (__builtin_expect(-1 == rc, 0)) - _FVObjectError(@"*** possible refcount underflow for %@, break on _FVObjectError() to debug.", self); -#else -#pragma unused(rc) -#endif - } -} - -- (id)retain -{ - if (__builtin_expect(__FVOASafe, 0)) NSRecordAllocationEvent(NSObjectInternalRefIncrementedEvent, self); - - uint32_t rc = OSAtomicIncrement32Barrier((volatile int32_t *)&_rc); -#if DEBUG - if (__builtin_expect(RETAIN_WARNING_THRESHOLD < rc, 0)) - _FVObjectError(@"*** high retain count (%u) for %@, break on _FVObjectError() to debug.", rc, self); -#else -#pragma unused(rc) -#endif - - return self; -} - -- (NSUInteger)retainCount { return _rc + 1; } - - @end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |