From 0e71d49ef41ee0c2347f549b4a6fa79ef8c57ddb Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 4 Jan 2016 00:00:33 -0300 Subject: [PATCH] -Fix crash at exit due to unnecesary check in command queue, fixes #2034 -Fix memory corruption due to using wrong singleton in multithreaded physics, fixes #2760 --- core/command_queue_mt.h | 2 +- demos/2d/rubegoldberg/engine.cfg | 1 + servers/physics_2d/space_2d_sw.cpp | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/command_queue_mt.h b/core/command_queue_mt.h index 84c3687b08c..4fd33e3a550 100644 --- a/core/command_queue_mt.h +++ b/core/command_queue_mt.h @@ -983,7 +983,7 @@ public: void flush_all() { - ERR_FAIL_COND(sync); + //ERR_FAIL_COND(sync); lock(); while (true) { bool exit = !flush_one(); diff --git a/demos/2d/rubegoldberg/engine.cfg b/demos/2d/rubegoldberg/engine.cfg index bd1cc79ddba..f0c306a53da 100644 --- a/demos/2d/rubegoldberg/engine.cfg +++ b/demos/2d/rubegoldberg/engine.cfg @@ -6,5 +6,6 @@ icon="res://icon.png" [physics_2d] +thread_model=2 default_gravity=500 default_density=0.01 diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp index 90174d48ee4..9ba6bdd5ba6 100644 --- a/servers/physics_2d/space_2d_sw.cpp +++ b/servers/physics_2d/space_2d_sw.cpp @@ -192,7 +192,7 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID& p_shape, const Matri if (p_result_max<=0) return 0; - Shape2DSW *shape = static_cast(Physics2DServer::get_singleton())->shape_owner.get(p_shape); + Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape,0); Rect2 aabb = p_xform.xform(shape->get_aabb()); @@ -239,7 +239,7 @@ bool Physics2DDirectSpaceStateSW::cast_motion(const RID& p_shape, const Matrix32 - Shape2DSW *shape = static_cast(Physics2DServer::get_singleton())->shape_owner.get(p_shape); + Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape,false); Rect2 aabb = p_xform.xform(shape->get_aabb()); @@ -367,7 +367,7 @@ bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Matrix32& p_s if (p_result_max<=0) return 0; - Shape2DSW *shape = static_cast(Physics2DServer::get_singleton())->shape_owner.get(p_shape); + Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape,0); Rect2 aabb = p_shape_xform.xform(shape->get_aabb()); @@ -474,7 +474,7 @@ static void _rest_cbk_result(const Vector2& p_point_A,const Vector2& p_point_B,v bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Matrix32& p_shape_xform,const Vector2& p_motion,float p_margin,ShapeRestInfo *r_info, const Set& p_exclude,uint32_t p_layer_mask,uint32_t p_object_type_mask) { - Shape2DSW *shape = static_cast(Physics2DServer::get_singleton())->shape_owner.get(p_shape); + Shape2DSW *shape = Physics2DServerSW::singletonsw->shape_owner.get(p_shape); ERR_FAIL_COND_V(!shape,0); Rect2 aabb = p_shape_xform.xform(shape->get_aabb());