On Thu, Nov 14, 2019 at 12:08:45PM +0100, Thomas Schwinge wrote: > > @@ -794,7 +807,7 @@ gomp_offload_image_to_device (struct gomp_device_descr > > *devicep, > > /* Insert host-target address mapping into splay tree. */ > > struct target_mem_desc *tgt = gomp_malloc (sizeof (*tgt)); > > tgt->array = gomp_malloc ((num_funcs + num_vars) * sizeof (*tgt->array)); > > - tgt->refcount = 1; > > + tgt->refcount = REFCOUNT_INFINITY; > > tgt->tgt_start = 0; > > tgt->tgt_end = 0; > > tgt->to_free = NULL; > > I had understood that 'REFCOUNT_INFINITY' is only meant to be used for > the 'refcount' in 'struct splay_tree_key_s', but here it's used for the > 'refcount' in 'struct target_mem_desc'. However, all the other 'struct > target_mem_desc' 'refcount' handling doesn't seem to take care of the > special 'REFCOUNT_INFINITY' value. > > This might not be an actually observable bug (I have not verified, have > not tried to construct a test case), but should this be changed anyway? > (Back to 'tgt->refcount = 1'; not yet tested?)
No, we certainly don't want the code to free this unless the image is unloaded. So, if anything, REFCOUNT_INFINITY needs to be special cased even in the target_mem_desc handling. But, do you actually see any code path where the current code doesn't work properly? Jakub