diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index d26b93657bf..239acf8cb75 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -3939,6 +3939,8 @@ GOMP_OFFLOAD_dev2dev (int device, void *dst, const void *src, size_t n) { struct agent_info *agent = get_agent_info (device); maybe_init_omp_async (agent); + if (!agent->omp_async_queue) + return false; queue_push_copy (agent->omp_async_queue, dst, src, n); return true; } @@ -4350,6 +4352,8 @@ GOMP_OFFLOAD_async_run (int device, void *tgt_fn, void *tgt_vars, } maybe_init_omp_async (agent); + if (!agent->omp_async_queue) + GOMP_PLUGIN_fatal ("Asynchronous queue initialization failed"); queue_push_launch (agent->omp_async_queue, kernel, tgt_vars, kla); queue_push_callback (agent->omp_async_queue, GOMP_PLUGIN_target_task_completion, async_data); @@ -4388,9 +4392,7 @@ GOMP_OFFLOAD_openacc_async_exec (void (*fn_ptr) (void *), gcn_exec (kernel, devaddrs, dims, targ_mem_desc, true, aq); } -/* Create a new asynchronous thread and queue for running future kernels; - issues a fatal error if the queue cannot be created as all callers expect - that the queue exists. */ +/* Create a new asynchronous thread and queue for running future kernels. */ struct goacc_asyncqueue * GOMP_OFFLOAD_openacc_async_construct (int device) @@ -4418,17 +4420,17 @@ GOMP_OFFLOAD_openacc_async_construct (int device) if (pthread_mutex_init (&aq->mutex, NULL)) { - GOMP_PLUGIN_fatal ("Failed to initialize a GCN agent queue mutex"); + GOMP_PLUGIN_error ("Failed to initialize a GCN agent queue mutex"); return NULL; } if (pthread_cond_init (&aq->queue_cond_in, NULL)) { - GOMP_PLUGIN_fatal ("Failed to initialize a GCN agent queue cond"); + GOMP_PLUGIN_error ("Failed to initialize a GCN agent queue cond"); return NULL; } if (pthread_cond_init (&aq->queue_cond_out, NULL)) { - GOMP_PLUGIN_fatal ("Failed to initialize a GCN agent queue cond"); + GOMP_PLUGIN_error ("Failed to initialize a GCN agent queue cond"); return NULL; }