Fix various block issues, see commit message#20
Merged
Conversation
This fixes a number of block-related issues in the codebase, as noted below. **This is a breaking change.** The API is changing to support these fixes. 1. Our flags had an off-by-one which meant our copy/dispose helpers were never being called. This caused other issues too like the refcount system not working properly so blocks would leak. 2. We were heap allocating a block but setting it as a stack allocated block. The proper behavior is to allocate it on the stack then let the ObjC runtime handle the copying via the compiler-rt. 3. Add manual copy/release helpers for blocks in case blocks are being passed around Zig code. This is needed because the Zig compiler won't automatically instrument the code like LLVM does for C-family languages. 4. Our copy helper that called `_Block_object_assign` was passing the wrong pointer value for the first parameter meaning reference counts weren't being incremented properly. Co-authored-by: qwerasd205 <qwerasd205@users.noreply.github.com>
4760492 to
e70f386
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This fixes a number of block-related issues in the codebase, as noted below. This is a breaking change. The API is changing to support these fixes.
Our flags had an off-by-one which meant our copy/dispose helpers were never being called. This caused other issues too like the refcount system not working properly so blocks would leak.
We were heap allocating a block but setting it as a stack allocated block. The proper behavior is to allocate it on the stack then let the ObjC runtime handle the copying via the compiler-rt.
Add manual copy/release helpers for blocks in case blocks are being passed around Zig code. This is needed because the Zig compiler won't automatically instrument the code like LLVM does for C-family languages.
Our copy helper that called
_Block_object_assignwas passing the wrong pointer value for the first parameter meaning reference counts weren't being incremented properly.