Fixed bug where destroyed objects in love.physics cause crash when collected.
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 }