SourceForge: love/love: changeset 138:ec84989ce60c
Fixed bug where destroyed objects in love.physics cause crash when collected.
authorrude
Tue Nov 10 23:25:12 2009 +0100 (2 weeks ago)
changeset 138ec84989ce60c
parent 13738dc19cb5b9e
child 1396bf699884aee
Fixed bug where destroyed objects in love.physics cause crash when collected.
src/modules/physics/box2d/CircleShape.cpp
src/modules/physics/box2d/PolygonShape.cpp
src/modules/physics/box2d/Shape.cpp
src/modules/physics/box2d/wrap_Body.cpp
src/modules/physics/box2d/wrap_Joint.cpp
src/modules/physics/box2d/wrap_Shape.cpp
     1.1 --- a/src/modules/physics/box2d/CircleShape.cpp	Tue Nov 10 20:24:29 2009 +0100
     1.2 +++ b/src/modules/physics/box2d/CircleShape.cpp	Tue Nov 10 23:25:12 2009 +0100
     1.3 @@ -42,8 +42,6 @@
     1.4  
     1.5  	CircleShape::~CircleShape()
     1.6  	{
     1.7 -		body->body->DestroyShape(shape);
     1.8 -		shape = 0;
     1.9  	}
    1.10  
    1.11  	float CircleShape::getRadius() const
     2.1 --- a/src/modules/physics/box2d/PolygonShape.cpp	Tue Nov 10 20:24:29 2009 +0100
     2.2 +++ b/src/modules/physics/box2d/PolygonShape.cpp	Tue Nov 10 23:25:12 2009 +0100
     2.3 @@ -42,8 +42,6 @@
     2.4  
     2.5  	PolygonShape::~PolygonShape()
     2.6  	{
     2.7 -		body->body->DestroyShape(shape);
     2.8 -		shape = 0;
     2.9  	}
    2.10  
    2.11  	int PolygonShape::getPoints(lua_State * L)
     3.1 --- a/src/modules/physics/box2d/Shape.cpp	Tue Nov 10 20:24:29 2009 +0100
     3.2 +++ b/src/modules/physics/box2d/Shape.cpp	Tue Nov 10 23:25:12 2009 +0100
     3.3 @@ -48,6 +48,11 @@
     3.4  
     3.5  		delete data;
     3.6  		data = 0;
     3.7 +
     3.8 +		body->body->DestroyShape(shape);
     3.9 +		shape = 0;
    3.10 +
    3.11 +		body->release();
    3.12  	}
    3.13  
    3.14  	Shape::Type Shape::getType() const
     4.1 --- a/src/modules/physics/box2d/wrap_Body.cpp	Tue Nov 10 20:24:29 2009 +0100
     4.2 +++ b/src/modules/physics/box2d/wrap_Body.cpp	Tue Nov 10 23:25:12 2009 +0100
     4.3 @@ -400,8 +400,12 @@
     4.4  
     4.5  	int w_Body_destroy(lua_State * L)
     4.6  	{
     4.7 -		Body * t = luax_checkbody(L, 1);
     4.8 +		Proxy * p = (Proxy *)lua_touserdata(L, 1);
     4.9 +		p->own = false;
    4.10 +
    4.11 +		Body * t = (Body *)p->data;
    4.12  		t->release();
    4.13 +
    4.14  		return 0;
    4.15  	}
    4.16  
     5.1 --- a/src/modules/physics/box2d/wrap_Joint.cpp	Tue Nov 10 20:24:29 2009 +0100
     5.2 +++ b/src/modules/physics/box2d/wrap_Joint.cpp	Tue Nov 10 23:25:12 2009 +0100
     5.3 @@ -80,8 +80,12 @@
     5.4  
     5.5  	int w_Joint_destroy(lua_State * L)
     5.6  	{
     5.7 -		Joint * t = luax_checkjoint(L, 1);
     5.8 +		Proxy * p = (Proxy *)lua_touserdata(L, 1);
     5.9 +		p->own = false;
    5.10 +
    5.11 +		Joint * t = (Joint *)p->data;
    5.12  		t->release();
    5.13 +
    5.14  		return 0;
    5.15  	}
    5.16  
     6.1 --- a/src/modules/physics/box2d/wrap_Shape.cpp	Tue Nov 10 20:24:29 2009 +0100
     6.2 +++ b/src/modules/physics/box2d/wrap_Shape.cpp	Tue Nov 10 23:25:12 2009 +0100
     6.3 @@ -200,7 +200,10 @@
     6.4  
     6.5  	int w_Shape_destroy(lua_State * L)
     6.6  	{
     6.7 -		Shape * t = luax_checkshape(L, 1);
     6.8 +		Proxy * p = (Proxy *)lua_touserdata(L, 1);
     6.9 +		p->own = false;
    6.10 +
    6.11 +		Shape * t = (Shape *)p->data;
    6.12  		t->release();
    6.13  		return 0;
    6.14  	}