Advertisement

Compiling in a seperate thread

Started by December 14, 2012 08:25 PM
2 comments, last by WitchLord 11 years, 11 months ago
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?

Thank you.
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.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Advertisement
Global variables are not allowed.

I suspect incremental GC calls which are called with no protection very frequently.
I added some guards around it.

Still i can't confirm it is fixed since problem only occurs 1 in a thousand compilations.
I will keep an out.

Thanks.
You may want to turn off the automatic garbage collection too with a call to:


engine->SetEngineProperty(asEP_AUTO_GARBAGE_COLLECT, false);


This is a recommendation that I've yet to add to the documentation.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This topic is closed to new replies.

Advertisement