• Advertisement
Sign in to follow this  

Compiling in a seperate thread

This topic is 1861 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

[CODE]
thread t([]()
{
mod->AddSection("section", "void main(){}");
int r = mod->Build(); assert(r>=0);
});

[/CODE]

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.

Share this post


Link to post
Share on other sites
Advertisement
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
You may want to turn off the automatic garbage collection too with a call to:

[code]
engine->SetEngineProperty(asEP_AUTO_GARBAGE_COLLECT, false);
[/code]

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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement