Allow the GC to run during ObjectiveC calls. #43
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
... by transitioning to GC-safe and back around the
ccall
.Instead of changing our callbacks to change back to GC-unsafe, I just bumped the minimal Julia version to 1.10, as on 1.9+
@cfunction
should automatically transition back.I also had to roll our own
ccall
argument conversion (cconvert
+unsafe_convert
), because simply doinggc_enter + ccall + gc_leave
(as we do in CUDA.jl) resulted in failed assertions due to the GC running during argument conversion. This is probably caused by ObjectiveC.jl having significantly more complex conversions (e.g.String
->NSString
), but nonetheless this should probably be done in CUDA.jl too.cc @vtjnash
Fixes JuliaGPU/Metal.jl#412, similar to JuliaGPU/CUDA.jl#2262.