From 86ac10c3f67cba6a7f0c2b122db8a51de6b1cc4f Mon Sep 17 00:00:00 2001 From: rude Date: Tue, 10 Nov 2009 23:25:12 +0100 Subject: [PATCH] Fixed bug where destroyed objects in love.physics cause crash when collected. --- src/modules/physics/box2d/CircleShape.cpp | 2 -- src/modules/physics/box2d/PolygonShape.cpp | 2 -- src/modules/physics/box2d/Shape.cpp | 5 +++++ src/modules/physics/box2d/wrap_Body.cpp | 6 +++++- src/modules/physics/box2d/wrap_Joint.cpp | 6 +++++- src/modules/physics/box2d/wrap_Shape.cpp | 5 ++++- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/modules/physics/box2d/CircleShape.cpp b/src/modules/physics/box2d/CircleShape.cpp index 227e67dc9..47bec179d 100644 --- a/src/modules/physics/box2d/CircleShape.cpp +++ b/src/modules/physics/box2d/CircleShape.cpp @@ -42,8 +42,6 @@ namespace box2d CircleShape::~CircleShape() { - body->body->DestroyShape(shape); - shape = 0; } float CircleShape::getRadius() const diff --git a/src/modules/physics/box2d/PolygonShape.cpp b/src/modules/physics/box2d/PolygonShape.cpp index d2a313ade..e887da41e 100644 --- a/src/modules/physics/box2d/PolygonShape.cpp +++ b/src/modules/physics/box2d/PolygonShape.cpp @@ -42,8 +42,6 @@ namespace box2d PolygonShape::~PolygonShape() { - body->body->DestroyShape(shape); - shape = 0; } int PolygonShape::getPoints(lua_State * L) diff --git a/src/modules/physics/box2d/Shape.cpp b/src/modules/physics/box2d/Shape.cpp index 80add6d91..071fad912 100644 --- a/src/modules/physics/box2d/Shape.cpp +++ b/src/modules/physics/box2d/Shape.cpp @@ -48,6 +48,11 @@ namespace box2d delete data; data = 0; + + body->body->DestroyShape(shape); + shape = 0; + + body->release(); } Shape::Type Shape::getType() const diff --git a/src/modules/physics/box2d/wrap_Body.cpp b/src/modules/physics/box2d/wrap_Body.cpp index a25be4f1b..88ffd18dc 100644 --- a/src/modules/physics/box2d/wrap_Body.cpp +++ b/src/modules/physics/box2d/wrap_Body.cpp @@ -400,8 +400,12 @@ namespace box2d int w_Body_destroy(lua_State * L) { - Body * t = luax_checkbody(L, 1); + Proxy * p = (Proxy *)lua_touserdata(L, 1); + p->own = false; + + Body * t = (Body *)p->data; t->release(); + return 0; } diff --git a/src/modules/physics/box2d/wrap_Joint.cpp b/src/modules/physics/box2d/wrap_Joint.cpp index 580b40425..b21967384 100644 --- a/src/modules/physics/box2d/wrap_Joint.cpp +++ b/src/modules/physics/box2d/wrap_Joint.cpp @@ -80,8 +80,12 @@ namespace box2d int w_Joint_destroy(lua_State * L) { - Joint * t = luax_checkjoint(L, 1); + Proxy * p = (Proxy *)lua_touserdata(L, 1); + p->own = false; + + Joint * t = (Joint *)p->data; t->release(); + return 0; } diff --git a/src/modules/physics/box2d/wrap_Shape.cpp b/src/modules/physics/box2d/wrap_Shape.cpp index b6ee80f07..f40701308 100644 --- a/src/modules/physics/box2d/wrap_Shape.cpp +++ b/src/modules/physics/box2d/wrap_Shape.cpp @@ -200,7 +200,10 @@ namespace box2d int w_Shape_destroy(lua_State * L) { - Shape * t = luax_checkshape(L, 1); + Proxy * p = (Proxy *)lua_touserdata(L, 1); + p->own = false; + + Shape * t = (Shape *)p->data; t->release(); return 0; }