support dynamic number of threads created by user application
thread-local data is allocated in blocks of OMNITRACE_MAX_THREADS (defined at compile-time)
omnitrace stores a lot of thread-specific data in arrays indexed by an integral value unique to that thread
this data persists even after the thread destroys it's static thread_local allocations
previously, if OMNITRACE_MAX_THREADS=32 then the user application could only create ~31 additional threads at the absolute max before omnitrace aborted
Now, omnitrace will allocate chunks in block-sizes of OMNITRACE_MAX_THREADS to support an unlimited number of threads, i.e. once the 32nd additional thread is created, omnitrace will resize all the thread_data instances to support 32 more threads (i.e. the size is originally 32 and after the resize, the size is 64)
OMNITRACE_MAX_THREADS
(defined at compile-time)static thread_local
allocationsOMNITRACE_MAX_THREADS=32
then the user application could only create ~31 additional threads at the absolute max before omnitrace abortedOMNITRACE_MAX_THREADS
to support an unlimited number of threads, i.e. once the 32nd additional thread is created, omnitrace will resize all thethread_data
instances to support 32 more threads (i.e. the size is originally 32 and after the resize, the size is 64)