[Beignet] [PATCH] Fix several CL error code return bugs
Dag Lem
dag at nimrod.no
Wed May 22 12:02:20 PDT 2013
Signed-off-by: Dag Lem <dag at nimrod.no>
---
src/cl_api.c | 42 ++++++++++++++++++++++--------------------
src/cl_context.c | 1 +
2 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/src/cl_api.c b/src/cl_api.c
index a4e534a..f378296 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -135,9 +135,10 @@ clCreateContextFromType(const cl_context_properties * properties,
void * user_data,
cl_int * errcode_ret)
{
+ cl_context context = NULL;
+ cl_int err = CL_SUCCESS;
cl_device_id devices[1];
cl_uint num_devices = 1;
- cl_int err;
err = cl_get_device_ids(NULL,
device_type,
@@ -145,16 +146,19 @@ clCreateContextFromType(const cl_context_properties * properties,
&devices[0],
&num_devices);
if (err != CL_SUCCESS) {
- *errcode_ret = err;
- return NULL;
+ goto error;
}
- return cl_create_context(properties,
- num_devices,
- devices,
- pfn_notify,
- user_data,
- errcode_ret);
+ context = cl_create_context(properties,
+ num_devices,
+ devices,
+ pfn_notify,
+ user_data,
+ &err);
+error:
+ if (errcode_ret)
+ *errcode_ret = err;
+ return context;
}
cl_int
@@ -214,9 +218,11 @@ clCreateCommandQueue(cl_context context,
cl_command_queue queue = NULL;
cl_int err = CL_SUCCESS;
CHECK_CONTEXT (context);
- queue = cl_context_create_queue(context, device, properties, errcode_ret);
+ queue = cl_context_create_queue(context, device, properties, &err);
error:
- return err == CL_SUCCESS ? queue : NULL;
+ if (errcode_ret)
+ *errcode_ret = err;
+ return queue;
}
cl_int
@@ -349,7 +355,7 @@ clCreateImage2D(cl_context context,
image_format,
&image_desc,
host_ptr,
- errcode_ret);
+ &err);
error:
if (errcode_ret)
*errcode_ret = err;
@@ -385,7 +391,7 @@ clCreateImage3D(cl_context context,
image_format,
&image_desc,
host_ptr,
- errcode_ret);
+ &err);
error:
if (errcode_ret)
*errcode_ret = err;
@@ -668,14 +674,12 @@ clCreateKernel(cl_program program,
err = CL_INVALID_PROGRAM_EXECUTABLE;
goto error;
}
- kernel = cl_program_create_kernel(program, kernel_name, errcode_ret);
+ kernel = cl_program_create_kernel(program, kernel_name, &err);
-exit:
- return kernel;
error:
if (errcode_ret)
*errcode_ret = err;
- goto exit;
+ return kernel;
}
cl_int
@@ -835,10 +839,8 @@ clFinish(cl_command_queue command_queue)
CHECK_QUEUE (command_queue);
err = cl_command_queue_finish(command_queue);
-exit:
- return err;
error:
- goto exit;
+ return err;
}
cl_int
diff --git a/src/cl_context.c b/src/cl_context.c
index 4a1925c..fc75d62 100644
--- a/src/cl_context.c
+++ b/src/cl_context.c
@@ -225,6 +225,7 @@ exit:
return queue;
error:
cl_command_queue_delete(queue);
+ queue = NULL;
goto exit;
}
--
1.8.1.4
More information about the Beignet
mailing list