workgroups: fix program/kernel object leak (#1775)

`create_single_kernel_helper` is called in a loop, overwriting the
objects contained in the wrapper classes.  The wrapper class is not
aware of this, as the overwriting happens through its `operator&`.

Move the wrapper objects into the loop, so that the contained objects
get released as soon as the program and kernel objects are no longer
needed.

Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com>
This commit is contained in:
Sven van Haastregt
2023-06-30 11:22:43 +01:00
committed by GitHub
parent 845ec694bb
commit 9b0f78549a

View File

@@ -221,8 +221,6 @@ int do_test_work_group_suggested_local_size(
bool (*skip_cond)(size_t), size_t start, size_t end, size_t incr,
cl_ulong max_local_mem_size, size_t global_work_offset[], num_dims dim)
{
clProgramWrapper scan_program;
clKernelWrapper scan_kernel;
int err;
size_t test_values[] = { 1, 1, 1 };
std::string kernel_names[6] = {
@@ -244,6 +242,8 @@ int do_test_work_group_suggested_local_size(
for (int kernel_num = 0; kernel_num < 6; kernel_num++)
{
if (max_local_mem_size < local_mem_size[kernel_num]) continue;
clProgramWrapper scan_program;
clKernelWrapper scan_kernel;
// Create the kernel
err = create_single_kernel_helper(
context, &scan_program, &scan_kernel, 1,