For details , see my attached crash log
2024-04-22_14-55-46.3894_+0200-498fa0a5137ba58fc535e918e393ed2c2efa174a.crash
The interesting part is in 2 CFNetwork 0x00000001895e6c58 _BrowserCancel(__CFNetServiceBrowser*) + 120 (CFNetServiceBrowser.c:179)
which can be opened here:
https://opensource.apple.com/source/CFNetwork/CFNetwork-129.18/NetServices/CFNetServiceBrowser.c.auto.html
/* static */ void
_BrowserCancel(__CFNetServiceBrowser* browser) {
CFNetServiceBrowserClientCallBack cb = NULL;
CFStreamError error;
void* info = NULL;
// Retain here to guarantee safety really after the browser release,
// but definitely before the callback.
CFRetain(browser);
// Lock the browser
__CFSpinLock(&browser->_lock);
// If the browse canceled, don't need to do any of this.
if (browser->_trigger) {
// Save the callback if there is one at this time.
cb = browser->_callback;
// Save the error and client information for the callback
memmove(&error, &(browser->_error), sizeof(error));
info = browser->_client.info;
// Remove the trigger from run loops and modes
_CFTypeUnscheduleFromMultipleRunLoops(browser->_trigger, browser->_schedules);
// Invalidate the run loop source that got here
CFRunLoopSourceInvalidate((CFRunLoopSourceRef)(browser->_trigger));
// Release the trigger now.
CFRelease(browser->_trigger);
browser->_trigger = NULL;
}
// Unlock the browser so the callback can be made safely.
__CFSpinUnlock(&browser->_lock);
// If there is a callback, inform the client of the finish.
if (cb)
cb((CFNetServiceBrowserRef)browser, 0, NULL, &error, info);
// Go ahead and release now that the callback is done.
CFRelease(browser);
}
the CFRunLoopSourceInvalidate causes the crash? There is a lock. But might be not correct?