Jump to content

  • Log In with Google      Sign In   
  • Create Account


- - - - -

Compiling in a seperate thread


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 saejox   Members   -  Reputation: 714

Like
0Likes
Like

Posted 14 December 2012 - 02:25 PM

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.

Sponsor:

#2 Andreas Jonsson   Moderators   -  Reputation: 3263

Like
0Likes
Like

Posted 14 December 2012 - 06:07 PM

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

#3 saejox   Members   -  Reputation: 714

Like
0Likes
Like

Posted 14 December 2012 - 07:30 PM

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.

#4 Andreas Jonsson   Moderators   -  Reputation: 3263

Like
1Likes
Like

Posted 14 December 2012 - 08:27 PM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS