Mapping can fail, and this should be handled. Return the proper error
code and abort the associated event in this case.
---
 src/gallium/state_trackers/clover/api/transfer.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/transfer.cpp 
b/src/gallium/state_trackers/clover/api/transfer.cpp
index 4986f53..275059c 100644
--- a/src/gallium/state_trackers/clover/api/transfer.cpp
+++ b/src/gallium/state_trackers/clover/api/transfer.cpp
@@ -699,11 +699,17 @@ clEnqueueMapBuffer(cl_command_queue d_q, cl_mem d_mem, 
cl_bool blocking,
       map_resource_op(q, &mem, flags, blocking, obj_origin, region, &map));
 
    ret_object(rd_ev, hev);
-   ret_error(r_errcode, CL_SUCCESS);
 
    if (blocking)
       hev().wait();
 
+   if (!map) {
+      hev().abort(CL_MAP_FAILURE);
+      ret_error(r_errcode, CL_MAP_FAILURE);
+      return NULL;
+   }
+
+   ret_error(r_errcode, CL_SUCCESS);
    return map;
 
 } catch (error &e) {
@@ -734,11 +740,17 @@ clEnqueueMapImage(cl_command_queue d_q, cl_mem d_mem, 
cl_bool blocking,
       map_resource_op(q, &img, flags, blocking, origin, region, &map));
 
    ret_object(rd_ev, hev);
-   ret_error(r_errcode, CL_SUCCESS);
 
    if (blocking)
       hev().wait();
 
+   if (!map) {
+      hev().abort(CL_MAP_FAILURE);
+      ret_error(r_errcode, CL_MAP_FAILURE);
+      return NULL;
+   }
+
+   ret_error(r_errcode, CL_SUCCESS);
    return map;
 
 } catch (error &e) {
-- 
1.9.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to