[PATCH 13/90] Fix data race in compile_and_link_program()
authorMichal Babej <michal.babej@tuni.fi>
Tue, 31 Aug 2021 06:11:52 +0000 (09:11 +0300)
committerAndreas Beckmann <anbe@debian.org>
Fri, 7 Jan 2022 23:55:22 +0000 (23:55 +0000)
lock cl_program before touching kernels

Gbp-Pq: Name 0013-Fix-data-race-in-compile_and_link_program.patch

lib/CL/pocl_build.c

index f2746e367148c928e526bdd24423c7475ad365f6..c162fae55e97eabd70ad622286a8d5571e91a816 100644 (file)
@@ -611,11 +611,13 @@ compile_and_link_program(int compile_program,
   POCL_GOTO_LABEL_COND (PFN_NOTIFY, (pfn_notify == NULL && user_data != NULL),
                         CL_INVALID_VALUE);
 
-  POCL_GOTO_LABEL_ON (PFN_NOTIFY, program->kernels, CL_INVALID_OPERATION,
+  POCL_LOCK_OBJ (program);
+
+  POCL_GOTO_LABEL_ON (FINISH, program->kernels, CL_INVALID_OPERATION,
                       "Program already has kernels\n");
 
   POCL_GOTO_LABEL_ON (
-      PFN_NOTIFY,
+      FINISH,
       (program->source == NULL && program->binaries == NULL
        && program->builtin_kernel_names == NULL),
       CL_INVALID_PROGRAM,
@@ -623,13 +625,11 @@ compile_and_link_program(int compile_program,
       "need "
       "to call clCreateProgramWith{Binary|Source|BuiltinKernels} first\n");
 
-  POCL_GOTO_LABEL_ON (PFN_NOTIFY,
+  POCL_GOTO_LABEL_ON (FINISH,
                       ((program->source == NULL) && (link_program == 0)),
                       CL_INVALID_OPERATION,
                       "Cannot clCompileProgram when program has no source\n");
 
-  POCL_LOCK_OBJ (program);
-
   program->main_build_log[0] = 0;
 
   TP_BUILD_PROGRAM (program->context->id, program->id);