Re: NSTextView EXC_BAD_ACCESS in deferred layout (RESOLVED)
Re: NSTextView EXC_BAD_ACCESS in deferred layout (RESOLVED)
- Subject: Re: NSTextView EXC_BAD_ACCESS in deferred layout (RESOLVED)
- From: "email@hidden" <email@hidden>
- Date: Sun, 10 Jan 2010 12:43:25 +0000
On 8 Jan 2010, at 11:35, email@hidden wrote:
> My GC app has two NSTextViews in two windows.
> Distinct attributed text can loaded into both NSTextView instances.
>
> The problem test text data size is 2MB.
> The problem does not manifest itself for smaller data sizes.
>
> The 2MB test data can be loaded repeatedly into a single NSTextView instance without issue.
> When the same test data is loaded into the second NSTextView instance the crash occurs.
>
> Obviously NSLayoutManager has initiated deferred layout.
> Do I have to be aware of any particular layout manager issues in this case?
>
> I am not doing any manipulation of the NSTextView contents.
> The content is established using the following binding.
>
> [_textView bind:NSAttributedStringBinding
> toObject:self
> withKeyPath:@"resultString"
> options:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSConditionallySetsEditableBindingOption, nil]];
>
>
This issue may be related to garbage collection.
I was initiating [[NSGarbageCollector defaultCollector]collectExhaustively] after the end of a particular operation.
Removing this greatly reduced but did not wholly eliminate the problem.
What did have a positive effect was to to configure the NSTextView instances as -setAllowsNonContiguousLayout:YES
Presumably this initiates a different code path.
As a precautionary measure I also turned off background layout.
[[myText layoutManager] setBackgroundLayoutEnabled:NO];
> Crash details follow.
>
> Thanks
>
> Jonathan
>
> Date/Time: 2010-01-08 11:11:32.074 +0000
> OS Version: Mac OS X 10.6.2 (10C540)
> Report Version: 6
>
> Exception Type: EXC_BAD_ACCESS (SIGBUS)
> Exception Codes: KERN_PROTECTION_FAILURE at 0x000000000000017c
> Crashed Thread: 0 Dispatch queue: com.apple.main-thread
>
> Application Specific Information:
> objc[653]: garbage collection is ON
>
> Thread 0 Crashed: Dispatch queue: com.apple.main-thread
> 0 com.apple.AppKit 0x92eadd3e -[NSATSGlyphStorage setAbsorbedCount:forIndex:] + 84
> 1 com.apple.CoreText 0x95cbf9e3 TObjCGlyphStorage::SetAttachmentCount(long, long) + 51
> 2 com.apple.CoreText 0x95cbf8b0 long TRun::SetAttachmentsLeftToRight<true>(long, long const*, long) + 402
> 3 com.apple.CoreText 0x95cbf6a8 TRun::DeleteGlyphs(long, long const*, long) + 60
> 4 com.apple.CoreText 0x95cbf5c1 TLine::DeleteGlyphs(long, long, long const*) + 243
> 5 com.apple.CoreText 0x95cab05f TShapingEngine::ShapeGlyphs(TLine&, TCharStream const&) + 647
> 6 com.apple.CoreText 0x95cbba47 TTypesetterRunArray::TTypesetterRunArray(__CFArray const*, __CFString const*, void const* (*)(__CTRun const*, __CFString const*, void*), void*) + 209
> 7 com.apple.CoreText 0x95cbb962 CTTypesetterCreateWithRunArray + 90
> 8 com.apple.AppKit 0x92dae76f -[NSATSGlyphStorage createCTTypesetter] + 1585
> 9 com.apple.AppKit 0x92daa8bc -[NSATSTypesetter _ctTypesetter] + 323
> 10 com.apple.AppKit 0x92da994b -[NSATSLineFragment layoutForStartingGlyphAtIndex:characterIndex:minPosition:maxPosition:lineFragmentRect:] + 72
> 11 com.apple.AppKit 0x92da84a4 -[NSATSTypesetter _layoutLineFragmentStartingWithGlyphAtIndex:characterIndex:atPoint:renderingContext:] + 2760
> 12 com.apple.AppKit 0x92e1addf -[NSATSTypesetter layoutParagraphAtPoint:] + 155
> 13 com.apple.AppKit 0x9331ecf0 -[NSTypesetter _layoutGlyphsInLayoutManager:startingAtGlyphIndex:maxNumberOfLineFragments:maxCharacterIndex:nextGlyphIndex:nextCharacterIndex:] + 2935
> 14 com.apple.AppKit 0x92e19fbe -[NSTypesetter layoutCharactersInRange:forLayoutManager:maximumNumberOfLineFragments:] + 218
> 15 com.apple.AppKit 0x92e19ea2 -[NSATSTypesetter layoutCharactersInRange:forLayoutManager:maximumNumberOfLineFragments:] + 1316
> 16 com.apple.AppKit 0x92e17eb4 -[NSLayoutManager(NSPrivate) _fillLayoutHoleForCharacterRange:desiredNumberOfLines:isSoft:] + 1020
> 17 com.apple.AppKit 0x92e8a509 -[NSLayoutManager(NSPrivate) _fillLayoutHoleAtIndex:desiredNumberOfLines:] + 261
> 18 com.apple.AppKit 0x92e8cf9c +[NSLayoutManager(NSPrivate) _doSomeBackgroundLayout] + 927
> 19 com.apple.AppKit 0x92e51af4 _NSPostBackgroundLayout + 562
> 20 com.apple.CoreFoundation 0x95f8b892 __CFRunLoopDoObservers + 1186
> 21 com.apple.CoreFoundation 0x95f483e2 __CFRunLoopRun + 1154
> 22 com.apple.CoreFoundation 0x95f47864 CFRunLoopRunSpecific + 452
> 23 com.apple.CoreFoundation 0x95f47691 CFRunLoopRunInMode + 97
> 24 com.apple.HIToolbox 0x96589f0c RunCurrentEventLoopInMode + 392
> 25 com.apple.HIToolbox 0x96589cc3 ReceiveNextEventCommon + 354
> 26 com.apple.HIToolbox 0x96589b48 BlockUntilNextEventMatchingListInMode + 81
> 27 com.apple.AppKit 0x92ceeac5 _DPSNextEvent + 847
> 28 com.apple.AppKit 0x92cee306 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
> 29 com.apple.AppKit 0x92cb049f -[NSApplication run] + 821
> 30 com.apple.AppKit 0x92ca8535 NSApplicationMain + 574
> 31 com.boo.myapp 0x00006bf1 main + 376 (main.m:32)
> 32 com.boo.myapp 0x00002a51 start + 53
>
> Thread 1: Dispatch queue: com.apple.libdispatch-manager
> 0 libSystem.B.dylib 0x94a3a0ea kevent + 10
> 1 libSystem.B.dylib 0x94a3a804 _dispatch_mgr_invoke + 215
> 2 libSystem.B.dylib 0x94a39cc3 _dispatch_queue_invoke + 163
> 3 libSystem.B.dylib 0x94a39a68 _dispatch_worker_thread2 + 234
> 4 libSystem.B.dylib 0x94a394f1 _pthread_wqthread + 390
> 5 libSystem.B.dylib 0x94a39336 start_wqthread + 30
>
> Thread 2:
> 0 libSystem.B.dylib 0x94a32856 select$DARWIN_EXTSN + 10
> 1 com.apple.CoreFoundation 0x95f87ddd __CFSocketManager + 1085
> 2 libSystem.B.dylib 0x94a40fbd _pthread_start + 345
> 3 libSystem.B.dylib 0x94a40e42 thread_start + 34
>
> Thread 3:
> 0 libSystem.B.dylib 0x94a39182 __workq_kernreturn + 10
> 1 libSystem.B.dylib 0x94a39718 _pthread_wqthread + 941
> 2 libSystem.B.dylib 0x94a39336 start_wqthread + 30
>
> Thread 4: Dispatch queue: Garbage Collection Work Queue
> 0 libauto.dylib 0x927fc707 Auto::MemoryScanner::scan_range(Auto::Range const&, Auto::WriteBarrier*) + 919
> 1 libauto.dylib 0x927fcb24 Auto::MemoryScanner::scan_for_unmarked_blocks(Auto::Subzone*, unsigned long, void*) + 148
> 2 libauto.dylib 0x927fcd53 Auto::MemoryScanner::scan_pending_until_done() + 339
> 3 libauto.dylib 0x927fced9 Auto::MemoryScanner::scan() + 41
> 4 libauto.dylib 0x927f2f98 Auto::Zone::collect(bool, void*, unsigned long long*) + 152
> 5 libauto.dylib 0x927dca37 auto_collect_internal(Auto::Zone*, int) + 407
> 6 libauto.dylib 0x927dd36c auto_collection_work(Auto::Zone*) + 140
> 7 libSystem.B.dylib 0x94a47828 _dispatch_call_block_and_release + 16
> 8 libSystem.B.dylib 0x94a3a1f4 _dispatch_queue_drain + 249
> 9 libSystem.B.dylib 0x94a39c52 _dispatch_queue_invoke + 50
> 10 libSystem.B.dylib 0x94a39a68 _dispatch_worker_thread2 + 234
> 11 libSystem.B.dylib 0x94a394f1 _pthread_wqthread + 390
> 12 libSystem.B.dylib 0x94a39336 start_wqthread + 30
>
> Thread 5:
> 0 libSystem.B.dylib 0x94a39182 __workq_kernreturn + 10
> 1 libSystem.B.dylib 0x94a39718 _pthread_wqthread + 941
> 2 libSystem.B.dylib 0x94a39336 start_wqthread + 30
>
> Thread 0 crashed with X86 Thread State (32-bit):
> eax: 0x0000005f ebx: 0x92eadcfe ecx: 0x00000000 edx: 0x00000001
> edi: 0x01422250 esi: 0x0021d400 ebp: 0xbfffcf18 esp: 0xbfffcef0
> ss: 0x0000001f efl: 0x00010246 eip: 0x92eadd3e cs: 0x00000017
> ds: 0x0000001f es: 0x0000001f fs: 0x00000000 gs: 0x00000037
> cr2: 0x0000017c
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden