Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (710)
Games in Android Showcase (212)
games submitted by our members
Games in WIP (784)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  native crash caused by dMass  (Read 1305 times)
0 Members and 1 Guest are viewing this topic.
Offline ewills

Junior Devvie

Java skeletal animation systems rock!

« Posted 2005-02-23 21:52:58 »

I have been experiencing a native crash seemingly involved with calling Body.setMassParameters() during program execution.  I now believe the problem is related to the creation of the local dMass object in the constructor of Body.  The dMass object is local, and therefore goes out of scope after execution of the constructor, causing the object to be garbage collected.  The dMass object being garbage collected seemingly invalidates the SWIG mass pointer.  I have verified that making the dMass object global within Body (therefore preventing it from being garbage collected) solves this problem.  For this reason, I think the dMass object should be a global instance variable within Body.  Any thoughts?   Cheesy
Offline zacsmakt

Innocent Bystander

Umm... Ya!

« Reply #1 - Posted 2005-02-24 16:02:57 »

Yeah I think I can verify that it's a bug alright.  In ode.odejava.Body constructor you see the creation of a little intermediate object called mass:

dMass mass = new dMass();

That object is a native proxy class holding a pointer (as a long) to a native object.  When dMass is instantiated in this way it creates a native object by making a call to Ode.new_dMass() and it sets an internal flag swigMemOwn=true.  That indicates that the object was created within the scope of that dMass instance and should therefore be destroyed when the instance is garbage collected.  

Here's a snippet from dMass showing what happens when the GC
calls finalize():

protected void finalize() {

public void delete() {
  if(swigCPtr != 0 && swigCMemOwn) {
              System.out.println("DELETING dMass! "+swigCPtr);
    swigCMemOwn = false;
  swigCPtr = 0;

Normally this works great and prevents memory leaks.  However, in this case (as you pointed out), the dMass instance has no references outside the scope of that class so the GC sees it as fair game for disposal as soon as the method returns.  This can create some nasty bugs since the app might seem to work normally for awhile and then bam!

I think the dMass instance should definitely be a private class-level field variable (as you have done), just to prevent it from getting GC'd.

Offline ewills

Junior Devvie

Java skeletal animation systems rock!

« Reply #2 - Posted 2005-02-25 16:44:45 »

This issue is now fixed in CVS.
Pages: [1]
  ignore  |  Print  
You cannot reply to this message, because it is very, very old.

theagentd (92 views)
2017-02-18 13:42:33

theagentd (96 views)
2017-02-18 13:35:16

h.pernpeintner (1261 views)
2017-01-24 22:39:11

h.pernpeintner (1250 views)
2017-01-24 22:38:32

Galdo (1808 views)
2017-01-12 13:44:09

Archive (1914 views)
2017-01-02 05:31:41

0AndrewShepherd0 (2452 views)
2016-12-16 03:58:39

0AndrewShepherd0 (2295 views)
2016-12-15 21:50:57

Lunch (2374 views)
2016-12-06 16:01:40

ral0r2 (2155 views)
2016-11-23 16:08:26
List of Learning Resources
by elect
2016-09-09 09:47:55

List of Learning Resources
by elect
2016-09-08 09:47:20

List of Learning Resources
by elect
2016-09-08 09:46:51

List of Learning Resources
by elect
2016-09-08 09:46:27

List of Learning Resources
by elect
2016-09-08 09:45:41

List of Learning Resources
by elect
2016-09-08 08:39:20

List of Learning Resources
by elect
2016-09-08 08:38:19

Rendering resources
by Roquen
2016-08-08 05:55:21 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!