Retain run loop (#11241)

Contributes: #11168


https://developer.apple.com/documentation/corefoundation/1542428-cfrunloopgetcurrent
implies that we should be `CFRetain`ing the run loop.

Lets do that, and see if it reduces the number of crashes we see.

Release Notes:

- (maybe) Fix a rare crash in watching settings files.
This commit is contained in:
Conrad Irwin 2024-04-30 23:31:59 -06:00 committed by GitHub
parent 45cf101f6d
commit 6b55a6f0e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 5 additions and 1 deletions

1
Cargo.lock generated
View File

@ -4105,6 +4105,7 @@ name = "fsevent"
version = "0.1.0"
dependencies = [
"bitflags 2.4.2",
"core-foundation",
"fsevent-sys 3.1.0",
"parking_lot",
"tempfile",

View File

@ -17,6 +17,7 @@ bitflags.workspace = true
parking_lot.workspace = true
[target.'cfg(target_os = "macos")'.dependencies]
core-foundation.workspace = true
fsevent-sys = "3.0.2"
[dev-dependencies]

View File

@ -120,7 +120,8 @@ impl EventStream {
{
self.state.callback = Some(Box::new(f));
unsafe {
let run_loop = cf::CFRunLoopGetCurrent();
let run_loop =
core_foundation::base::CFRetain(cf::CFRunLoopGetCurrent()) as *mut c_void;
{
let mut state = self.lifecycle.lock();
match *state {
@ -248,6 +249,7 @@ impl Drop for Handle {
if let Lifecycle::Running(run_loop) = *state {
unsafe {
cf::CFRunLoopStop(run_loop);
cf::CFRelease(run_loop)
}
}
*state = Lifecycle::Stopped;