Ignore thread models when compiling with NO_THREAD
The thread model option for physics (2D) and rendering (single-unsafe,
single-safe, multithread), was causing crashes/locks when set as
multithreaded and exported for a platform that does not support threads
(namely HTML5).
This commit ensures that when threads support is not available, that
option is ignored, and the equivalent of "single-unsafe" is always used
instead.
(cherry picked from commit f3c6ac1d71
)
This commit is contained in:
parent
bf9090c23f
commit
6dffc1ef46
|
@ -1118,9 +1118,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|||
}
|
||||
|
||||
if (rtm >= 0 && rtm < 3) {
|
||||
#ifdef NO_THREADS
|
||||
rtm = OS::RENDER_THREAD_UNSAFE; // No threads available on this platform.
|
||||
#else
|
||||
if (editor) {
|
||||
rtm = OS::RENDER_THREAD_SAFE;
|
||||
}
|
||||
#endif
|
||||
OS::get_singleton()->_render_thread_mode = OS::RenderThreadMode(rtm);
|
||||
}
|
||||
|
||||
|
|
|
@ -1455,7 +1455,11 @@ Physics2DServerSW::Physics2DServerSW() {
|
|||
island_count = 0;
|
||||
active_objects = 0;
|
||||
collision_pairs = 0;
|
||||
#ifdef NO_THREADS
|
||||
using_threads = false;
|
||||
#else
|
||||
using_threads = int(ProjectSettings::get_singleton()->get("physics/2d/thread_model")) == 2;
|
||||
#endif
|
||||
flushing_queries = false;
|
||||
};
|
||||
|
||||
|
|
|
@ -326,6 +326,9 @@ public:
|
|||
template <class T>
|
||||
static Physics2DServer *init_server() {
|
||||
|
||||
#ifdef NO_THREADS
|
||||
return memnew(T); // Always single unsafe when no threads are available.
|
||||
#else
|
||||
int tm = GLOBAL_DEF("physics/2d/thread_model", 1);
|
||||
if (tm == 0) // single unsafe
|
||||
return memnew(T);
|
||||
|
@ -333,6 +336,7 @@ public:
|
|||
return memnew(Physics2DServerWrapMT(memnew(T), false));
|
||||
else // multi threaded
|
||||
return memnew(Physics2DServerWrapMT(memnew(T), true));
|
||||
#endif
|
||||
}
|
||||
|
||||
#undef ServerNameWrapMT
|
||||
|
|
Loading…
Reference in New Issue