UnityGame/Library/PackageCache/com.unity.collections/Documentation~/issues.md
2024-10-27 10:53:47 +03:00

1.4 KiB

uid
collections-known-issues

Known issues

All containers allocated with Allocator.Temp on the same thread use a shared AtomicSafetyHandle instance rather than each having their own. Most of the time, this isn't an issue because you can't pass Temp allocated collections into a job.

However, when you use Native*HashMap, NativeParallelMultiHashMap, Native*HashSet, and NativeList together with their secondary safety handle, this shared AtomicSafetyHandle instance is a problem.

A secondary safety handle ensures that a NativeArray which aliases a NativeList is invalidated when the NativeList is reallocated due to resizing.

Operations that invalidate an enumerator for these collection types, or invalidate the NativeArray that NativeList.AsArray returns also invalidates all other previously acquired enumerators. For example, the following throws an error when safety checks are enabled:

var list = new NativeList<int>(Allocator.Temp);
list.Add(1);

// This array uses the secondary safety handle of the list, which is
// shared between all Allocator.Temp allocations.
var array = list.AsArray();

var list2 = new NativeHashSet<int>(Allocator.Temp);

// This invalidates the secondary safety handle, which is also used
// by the list above.
list2.TryAdd(1);

// This throws an InvalidOperationException because the shared safety
// handle was invalidated.
var x = array[0];