@@ -286,20 +286,20 @@ static _Atomic(jl_value_t*) *mtcache_hash_lookup_bp(jl_genericmemory_t *cache JL
286286 return pml ;
287287}
288288
289- static void mtcache_hash_insert (_Atomic (jl_genericmemory_t * ) * cache , jl_value_t * parent , jl_value_t * key , jl_typemap_t * val )
289+ static void mtcache_hash_insert (_Atomic (jl_genericmemory_t * ) * pcache , jl_value_t * parent , jl_value_t * key , jl_typemap_t * val )
290290{
291291 int inserted = 0 ;
292- jl_genericmemory_t * a = jl_atomic_load_relaxed (cache );
292+ jl_genericmemory_t * a = jl_atomic_load_relaxed (pcache );
293293 if (a == (jl_genericmemory_t * )jl_an_empty_memory_any ) {
294294 a = jl_alloc_memory_any (16 );
295- jl_atomic_store_release (cache , a );
295+ jl_atomic_store_release (pcache , a );
296296 if (parent )
297297 jl_gc_wb (parent , a );
298298 }
299299 a = jl_eqtable_put (a , key , val , & inserted );
300300 assert (inserted );
301- if (a != jl_atomic_load_relaxed (cache )) {
302- jl_atomic_store_release (cache , a );
301+ if (a != jl_atomic_load_relaxed (pcache )) {
302+ jl_atomic_store_release (pcache , a );
303303 if (parent )
304304 jl_gc_wb (parent , a );
305305 }
@@ -1293,9 +1293,10 @@ static void jl_typemap_memory_insert_(
12931293static jl_value_t * jl_method_convert_list_to_cache (
12941294 jl_typemap_t * map , jl_typemap_entry_t * ml , int8_t tparam , int8_t offs , int8_t doublesplit )
12951295{
1296- jl_value_t * cache = doublesplit ? jl_an_empty_memory_any : (jl_value_t * )jl_new_typemap_level ();
1296+ _Atomic(jl_genericmemory_t * ) dblcache = (jl_genericmemory_t * )jl_an_empty_memory_any ;
1297+ jl_typemap_level_t * cache = doublesplit ? NULL : jl_new_typemap_level ();
12971298 jl_typemap_entry_t * next = NULL ;
1298- JL_GC_PUSH3 (& cache , & next , & ml );
1299+ JL_GC_PUSH4 (& cache , & dblcache , & next , & ml );
12991300 while (ml != (void * )jl_nothing ) {
13001301 next = jl_atomic_load_relaxed (& ml -> next );
13011302 jl_atomic_store_relaxed (& ml -> next , (jl_typemap_entry_t * )jl_nothing );
@@ -1316,14 +1317,14 @@ static jl_value_t *jl_method_convert_list_to_cache(
13161317 assert (jl_is_type_type (key ));
13171318 key = jl_tparam0 (key );
13181319 }
1319- jl_typemap_memory_insert_ (map , (_Atomic ( jl_genericmemory_t * ) * ) & cache , key , ml , NULL , 0 , offs , NULL );
1320+ jl_typemap_memory_insert_ (map , & dblcache , key , ml , NULL , 0 , offs , NULL );
13201321 }
13211322 else
1322- jl_typemap_level_insert_ (map , ( jl_typemap_level_t * ) cache , ml , offs );
1323+ jl_typemap_level_insert_ (map , cache , ml , offs );
13231324 ml = next ;
13241325 }
13251326 JL_GC_POP ();
1326- return cache ;
1327+ return doublesplit ? ( jl_value_t * ) jl_atomic_load_relaxed ( & dblcache ) : ( jl_value_t * ) cache ;
13271328}
13281329
13291330static void jl_typemap_list_insert_ (
0 commit comments