This situation can happen if we failed to allocate memory for the shader.
v2:
- We shouldn't see NULL shaders in anv_shader_bin_ref so we should not check
for that (Jason). Make sure that callers don't attempt to call this
function with a NULL shader and assert that this never happens (Iago).
v3:
- All callers to anv_shader_bin_unref seem to check for NULL before calling,
so just assert that it is not NULL (Topi)
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
pthread_mutex_unlock(&cache->mutex);
/* We increment refcount before handing it to the caller */
- anv_shader_bin_ref(bin);
+ if (bin)
+ anv_shader_bin_ref(bin);
return bin;
} else {
struct hash_entry *entry;
hash_table_foreach(src->cache, entry) {
struct anv_shader_bin *bin = entry->data;
+ assert(bin);
+
if (_mesa_hash_table_search(dst->cache, bin->key))
continue;
static inline void
anv_shader_bin_ref(struct anv_shader_bin *shader)
{
- assert(shader->ref_cnt >= 1);
+ assert(shader && shader->ref_cnt >= 1);
__sync_fetch_and_add(&shader->ref_cnt, 1);
}
static inline void
anv_shader_bin_unref(struct anv_device *device, struct anv_shader_bin *shader)
{
- assert(shader->ref_cnt >= 1);
+ assert(shader && shader->ref_cnt >= 1);
if (__sync_fetch_and_add(&shader->ref_cnt, -1) == 1)
anv_shader_bin_destroy(device, shader);
}