Fix memory leaks in api test suite (#2363)

This commit fixes three tests that have memory leaks due to unreleased
CL objects.
- `kernel_local_memory_size`
- `multi_queue_flush_on_release`
- `queue_flush_on_release`

Signed-off-by: Michael Rizkalla <michael.rizkalla@arm.com>
This commit is contained in:
Michael Rizkalla
2025-06-24 23:27:15 +01:00
committed by GitHub
parent 3345ea5af3
commit 880bce6047
2 changed files with 12 additions and 6 deletions

View File

@@ -153,6 +153,8 @@ REGISTER_TEST(kernel_local_memory_size)
"kernel local mem size failed"); "kernel local mem size failed");
program.reset();
kernel.reset();
// Check memory needed to execute empty kernel with __local parameter with // Check memory needed to execute empty kernel with __local parameter with
// setKernelArg // setKernelArg
if (create_single_kernel_helper(context, &program, &kernel, 1, if (create_single_kernel_helper(context, &program, &kernel, 1,
@@ -225,6 +227,8 @@ REGISTER_TEST(kernel_local_memory_size)
"kernel local mem size failed"); "kernel local mem size failed");
program.reset();
kernel.reset();
// Check memory needed to execute kernel with __local variable and __local // Check memory needed to execute kernel with __local variable and __local
// parameter with setKernelArg // parameter with setKernelArg
if (create_single_kernel_helper(context, &program, &kernel, 1, if (create_single_kernel_helper(context, &program, &kernel, 1,

View File

@@ -23,7 +23,8 @@ REGISTER_TEST(queue_flush_on_release)
cl_int err; cl_int err;
// Create a command queue // Create a command queue
cl_command_queue cmd_queue = clCreateCommandQueue(context, device, 0, &err); clCommandQueueWrapper cmd_queue =
clCreateCommandQueue(context, device, 0, &err);
test_error(err, "Could not create command queue"); test_error(err, "Could not create command queue");
// Create a kernel // Create a kernel
@@ -42,7 +43,7 @@ REGISTER_TEST(queue_flush_on_release)
test_error(err, "Could not enqueue kernel"); test_error(err, "Could not enqueue kernel");
// Release the queue // Release the queue
err = clReleaseCommandQueue(cmd_queue); cmd_queue.reset();
// Wait for kernel to execute since the queue must flush on release // Wait for kernel to execute since the queue must flush on release
bool success = poll_until(2000, 50, [&event]() { bool success = poll_until(2000, 50, [&event]() {
@@ -64,11 +65,13 @@ REGISTER_TEST(multi_queue_flush_on_release)
cl_int err; cl_int err;
// Create A command queue // Create A command queue
cl_command_queue queue_A = clCreateCommandQueue(context, device, 0, &err); clCommandQueueWrapper queue_A =
clCreateCommandQueue(context, device, 0, &err);
test_error(err, "Could not create command queue A"); test_error(err, "Could not create command queue A");
// Create B command queue // Create B command queue
cl_command_queue queue_B = clCreateCommandQueue(context, device, 0, &err); clCommandQueueWrapper queue_B =
clCreateCommandQueue(context, device, 0, &err);
test_error(err, "Could not create command queue B"); test_error(err, "Could not create command queue B");
// Create a kernel // Create a kernel
@@ -96,8 +99,7 @@ REGISTER_TEST(multi_queue_flush_on_release)
// Release queue_A, which performs an implicit flush to issue any previously // Release queue_A, which performs an implicit flush to issue any previously
// queued OpenCL commands // queued OpenCL commands
err = clReleaseCommandQueue(queue_A); queue_A.reset();
test_error(err, "clReleaseCommandQueue failed");
err = clFlush(queue_B); err = clFlush(queue_B);
test_error(err, "clFlush failed"); test_error(err, "clFlush failed");