Skip to content

Commit

Permalink
C#: Fix incorrect GC handle for non-instantiable types.
Browse files Browse the repository at this point in the history
  • Loading branch information
zaevi committed Jan 24, 2024
1 parent 0bcc0e9 commit 201e946
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
10 changes: 7 additions & 3 deletions modules/mono/editor/bindings_generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1621,9 +1621,13 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str
<< CLOSE_BLOCK_L2 CLOSE_BLOCK_L1;
} else {
// Hide the constructor
output.append(MEMBER_BEGIN "internal ");
output.append(itype.proxy_name);
output.append("() {}\n");
output << MEMBER_BEGIN "internal " << itype.proxy_name << "() : this("
<< (itype.memory_own ? "true" : "false") << ")\n" OPEN_BLOCK_L1
<< INDENT2 "unsafe\n" INDENT2 OPEN_BLOCK
<< INDENT3 "_ConstructAndInitialize(null, "
<< BINDINGS_NATIVE_NAME_FIELD ", CachedType, refCounted: "
<< (itype.is_ref_counted ? "true" : "false") << ");\n"
<< CLOSE_BLOCK_L2 CLOSE_BLOCK_L1;
}

// Add.. em.. trick constructor. Sort of.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ bool refCounted
{
if (NativePtr == IntPtr.Zero)
{
Debug.Assert(nativeCtor != null);

NativePtr = nativeCtor();

InteropUtils.TieManagedToUnmanaged(this, NativePtr,
Expand Down

0 comments on commit 201e946

Please sign in to comment.