macOS application random crash inside system Contacts framework

Hi,

I encountered a crash that happens randomly on certain macOS. Here's the crash log. For clarity, only the crashed queue's stack trace is added.

Process:               Engage [6891]
Path:                  /Applications/Engage.app/Contents/MacOS/Engage
Identifier:            com.mycompany.engage
Version:               2.0.1 (20111120)
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Engage [6891]
User ID:               2123560928

Date/Time:             2021-11-17 16:36:20.753 +0800
OS Version:            Mac OS X 10.14.6 (18G9323)
Report Version:        12
Anonymous UUID:        C642EE95-AF30-723E-91B8-A1C9D4ECD9A6

Sleep/Wake UUID:       B95DB75A-69E8-4F19-B735-CEC7A698AE00

Time Awake Since Boot: 40000 seconds
Time Since Wake:       910 seconds

System Integrity Protection: enabled

Crashed Thread:        5  Dispatch queue: Contacts fetching queue

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [6891]

Application Specific Information:
API MISUSE: Resurrection of an object

Thread 0:: Dispatch queue: com.apple.main-thread
...
Thread 1:
...
Thread 2:
...
Thread 3:
...
Thread 4:: Dispatch queue: com.apple.root.background-qos
...
Thread 5 Crashed:: Dispatch queue: Contacts fetching queue
0   libdispatch.dylib             	0x00007fff703929a6 _os_object_retain + 34
1   com.apple.AppKit              	0x00007fff41bbc6da -[_NSWorkspaceFileOperation initWithQueue:URLs:operation:completionHandler:] + 111
2   com.apple.AppKit              	0x00007fff41bbc5a0 -[NSWorkspace recycleURLs:completionHandler:] + 726
3   com.apple.AddressBook.core    	0x00007fff53cd5004 -[ABPersistentStoreBuilder removeDotNewPathForDatabasePath] + 212
4   com.apple.AddressBook.core    	0x00007fff53cd42f3 -[ABPersistentStoreBuilder addPersistentStoreAtDatabasePath:] + 61
5   com.apple.AddressBook.core    	0x00007fff53cd3da4 -[ABPersistentStoreCoordinatorFactory addStoresForAccounts:withStoreBuilder:] + 333
6   com.apple.AddressBook.core    	0x00007fff53cccd7f -[ABPersistentStoreCoordinatorFactory pool_makeCoordinatorForAllAvailableSources] + 114
7   com.apple.AddressBook.core    	0x00007fff53ccccc1 ABResultWithAutoreleasePool + 59
8   com.apple.AddressBook.core    	0x00007fff53cccc80 -[ABPersistentStoreCoordinatorFactory makeCoordinatorForAllAvailableSources] + 65
9   com.apple.AddressBook.core    	0x00007fff53ccca4c -[ABPersistentStoreCoordinatorMap nts_coordinatorForAllSourcesAndDidUpdateMap:] + 114
10  com.apple.AddressBook.core    	0x00007fff53ccc99d -[ABPersistentStoreCoordinatorCache coordinatorForAllSources] + 55
11  com.apple.AddressBook.core    	0x00007fff53ccc777 -[ABAddressBook(ABAddressBook_CoreData_Private) nts_managedObjectContextWithStoreDescription:databasePath:loadFailure:] + 288
12  com.apple.AddressBook.core    	0x00007fff53ccc377 -[ABAddressBook(ABAddressBook_CoreData_Private) managedObjectContext] + 109
13  com.apple.AddressBook.core    	0x00007fff53ccc2c0 __38+[ABAddressBook nts_SharedAddressBook]_block_invoke + 24
14  com.apple.AddressBook.core    	0x00007fff53ccc257 ABRunWithLock + 32
15  com.apple.AddressBook.core    	0x00007fff53cc8873 +[ABAddressBook nts_SharedAddressBook] + 137
16  com.apple.AddressBook.core    	0x00007fff53cc8747 +[ABAddressBook nts_CreateSharedAddressBook] + 47
17  com.apple.AddressBook.core    	0x00007fff53cc817e +[ABAddressBook sharedAddressBook] + 81
18  com.apple.contacts.ContactsPersistence	0x00007fff572427ee -[CNCDPersistenceStack makePersistenceContext] + 27
19  com.apple.contacts            	0x00007fff43d048dd __71+[CNCDContactFetcher contactsForFetchRequest:inPersistenceStack:error:]_block_invoke + 73
20  com.apple.AddressBook.ContactsFoundation	0x00007fff571e407a +[CNEither eitherWithBlock:] + 63
21  com.apple.contacts            	0x00007fff43d047e1 +[CNCDContactFetcher contactsForFetchRequest:inPersistenceStack:error:] + 147
22  com.apple.contacts            	0x00007fff43d0462a -[CNCoreDataMapperX contactObservableForFetchRequest:] + 137
23  com.apple.contacts            	0x00007fff43d03fc3 __91-[CNDataMapperContactStore enumerateContactsAndMatchInfoWithFetchRequest:error:usingBlock:]_block_invoke + 172
24  libsystem_trace.dylib         	0x00007fff705f6724 os_activity_apply_f + 66
25  com.apple.contacts            	0x00007fff43d03ed8 -[_CNContactsLogger fetchingContacts:] + 225
26  com.apple.contacts            	0x00007fff43d03cee -[CNDataMapperContactStore enumerateContactsAndMatchInfoWithFetchRequest:error:usingBlock:] + 304
27  com.apple.contacts            	0x00007fff43d16d6e -[CNContactStore enumerateContactsWithFetchRequest:error:usingBlock:] + 149
28  com.mycompany.engage          	0x00000001076181f4 0x1074c6000 + 1384948
29  com.mycompany.engage          	0x00000001076548ce 0x1074c6000 + 1632462
30  libdispatch.dylib             	0x00007fff703925f8 _dispatch_call_block_and_release + 12
31  libdispatch.dylib             	0x00007fff7039363d _dispatch_client_callout + 8
32  libdispatch.dylib             	0x00007fff703998e0 _dispatch_lane_serial_drain + 602
33  libdispatch.dylib             	0x00007fff7039a396 _dispatch_lane_invoke + 385
34  libdispatch.dylib             	0x00007fff703a26ed _dispatch_workloop_worker_thread + 598
35  libsystem_pthread.dylib       	0x00007fff705d3611 _pthread_wqthread + 421
36  libsystem_pthread.dylib       	0x00007fff705d33fd start_wqthread + 13

Thread 6:
...

In the stack trace, two lines that are related to my app

28  com.mycompany.engage          	0x00000001076181f4 0x1074c6000 + 1384948
29  com.mycompany.engage          	0x00000001076548ce 0x1074c6000 + 1632462

It just call the enumerateContacts(with: fetchRequest) on the instance of CNContactStore, and the fetchRequest is created using CNContactFetchRequest(keysToFetch: keysToFetch). Pretty straightforward.

The stack trace goes into he Contacts framework, and then goes into the AddressBook framework, and eventually crashed. What could be the possible cause of the crash?

macOS application random crash inside system Contacts framework
 
 
Q