My custom free function sometimes receives unknown pointers. Trying to track down the cause.
Cause is this background compilation.
I am building a module in a separate thread like this
thread t([]()
{
mod->AddSection("section", "void main(){}");
int r = mod->Build(); assert(r>=0);
});
Just this, no other thread building a module. There are no contexts created or used in this thread. During this thread work i do not execute any context on other threads.
I have read this
http://www.angelcode.com/angelscript/sdk/docs/manual/doc_adv_multithread.html
Two things i am not certain.
1. Do i still need to call asThreadCleanup end of this thread?
2. Is it safe to call GarbageCollector? Should i make sure both does not occur at the same time.
3. Maybe something else i am not thinking?
You should call asThreadCleanup before the thread finished. This is necessary to free some thread local memory that may otherwise accumulate for each thread you create.
I haven't received any reports on problems with multithreading and the garbage collector. The gc is protected so only one thread will execute it simultaneously, but I recommend caution when running the gc to avoid problems with the gc enumerating references in the objects while they are modified by another thread.
During compilations the initialization of global variables may execute bytecode using a script context. You can turn off automatic initialization of global variables if you wish to control when they are initialized.