Skip to content

Commit 059898f

Browse files
authored
[mono] Fix a race in gparam construction. (#83688)
Re: #81123.
1 parent dcd0506 commit 059898f

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/mono/mono/metadata/metadata.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3734,12 +3734,14 @@ publish_anon_gparam_fast (MonoImage *image, MonoGenericContainer *container, gin
37343734
if (!*cache) {
37353735
mono_image_lock (image);
37363736
if (!*cache) {
3737-
*cache = (MonoGenericParam*)mono_image_alloc0 (image, sizeof (MonoGenericParam) * FAST_GPARAM_CACHE_SIZE);
3737+
MonoGenericParam *new_cache = (MonoGenericParam*)mono_image_alloc0 (image, sizeof (MonoGenericParam) * FAST_GPARAM_CACHE_SIZE);
37383738
for (guint16 i = 0; i < FAST_GPARAM_CACHE_SIZE; ++i) {
3739-
MonoGenericParam *param = &(*cache)[i];
3739+
MonoGenericParam *param = &new_cache[i];
37403740
param->owner = container;
37413741
param->num = i;
37423742
}
3743+
mono_memory_barrier ();
3744+
*cache = new_cache;
37433745
}
37443746
mono_image_unlock (image);
37453747
}

0 commit comments

Comments
 (0)