Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions tests/monotouch-test/CoreGraphics/CGRenderingBufferProviderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,27 +32,26 @@ public void SizeProperty_DoesNotThrow ()
var calledOnLockPointer = false;
var calledOnUnlockPointer = false;
var calledOnReleaseInfo = false;
var provider = CGRenderingBufferProvider.Create ((nint) 0x0ee1f00d, (nuint) size,
lockPointer: (info) => {
calledOnLockPointer = true;
var rv = Marshal.AllocHGlobal (size);
// Console.WriteLine ($"CreateAdaptive () OnLockPointer#4 ({info}) => {rv}");
return rv;
},
unlockPointer: (info, pointer) => {
// Console.WriteLine ($"CreateAdaptive () OnUnlockPointer#4 ({info}, {pointer})");
calledOnUnlockPointer = true;
Marshal.FreeHGlobal (pointer);
},
releaseInfo: (info) => {
// Console.WriteLine ($"CreateAdaptive () OnReleaseInfo#4 ({info})");
calledOnReleaseInfo = true;
});
Assert.That (provider, Is.Not.Null, "provider");
Assert.That (provider.Size, Is.EqualTo ((nuint) size), "size");
using (var pool = new NSAutoreleasePool ()) {
using var provider = CGRenderingBufferProvider.Create ((nint) 0x0ee1f00d, (nuint) size,
lockPointer: (info) => {
calledOnLockPointer = true;
var rv = Marshal.AllocHGlobal (size);
return rv;
},
unlockPointer: (info, pointer) => {
calledOnUnlockPointer = true;
Marshal.FreeHGlobal (pointer);
},
releaseInfo: (info) => {
calledOnReleaseInfo = true;
});
Assert.That (provider, Is.Not.Null, "provider");
Assert.That (provider.Size, Is.EqualTo ((nuint) size), "size");
Comment on lines +35 to +50
Copy link

Copilot AI Jan 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

provider is created inside the autorelease pool but never disposed. Since CGRenderingBufferProvider inherits NativeObject, the native handle is only released deterministically when Dispose is called; otherwise releaseInfo may or may not run before the assertions (depends on GC/finalization), which can keep this test flaky. Wrap the provider in using/using var (inside the pool) so its lifetime is deterministic, and then keep the calledOnReleaseInfo assertion outside the pool (similar to BitmapContextTest.cs's CreateAdaptive_4).

Copilot uses AI. Check for mistakes.
}
Assert.That (calledOnLockPointer, Is.EqualTo (false), "calledOnLockPointer");
Assert.That (calledOnUnlockPointer, Is.EqualTo (false), "calledOnUnlockPointer");
Assert.That (calledOnReleaseInfo, Is.EqualTo (false), "calledOnReleaseInfo");
Assert.That (calledOnReleaseInfo, Is.EqualTo (true), "calledOnReleaseInfo");
}

[Test]
Expand Down
Loading