Impl Send+Sync for CFRunLoopTimer, CFRunLoopSource, CFRunLoopObserver#649
Impl Send+Sync for CFRunLoopTimer, CFRunLoopSource, CFRunLoopObserver#649kevinmehall wants to merge 1 commit intoservo:mainfrom
Conversation
7081449 to
700ea22
Compare
|
I didn't see a clear reference in the Apple docs about the thread safety of these APIs, apart from that you can register them in a single runloop but not multiple. @madsmtm What do you think of this? It looks like you looked into it some before in the issue that you linked. |
|
I don't dare say anything about the others, though I will reference this piece of documentation and that CoreFoundation is open source, then you have the same to work with as I do ;). |
|
Though actually, all of these carry callbacks that the user sets, and those callbacks may not be |
|
@kevinmehall What is your goal with this change? (I am away from home all day today running errands) |
|
In nusb, I'm launching a dedicated background thread for a https://github.com/kevinmehall/nusb/blob/main/src/platform/macos_iokit/events.rs I ended up doing this by making newtype wrappers around these types that I could put Send + Sync impls on. Like winit, I actually also only need CFRunLoopSource; the others were included in this PR just because they seemed to have the same properties. Good point on the callbacks -- Looking at the safe functions in this crate that accept callbacks that end up in these types ( I'm fine with needing to write Also, I think making CFRunLoop itself Send+Sync in #610, and the existence of |
|
Good points overall! Perhaps a solution would be to make This way, e.g. |
Following #610, the same reasoning from #550 applies to the remaining CFRunLoop types.