On 09/23/2010 06:41 AM, Eric Sunshine wrote: > On 09/22/2010 04:09 PM, res wrote: >> On 22.09.2010 21:58, Sebastian Hoffmann wrote: >>> My code segfaults when calling iPcLinearMovement.SetPath() in this code: >>> def pccommandinput_moveplane1(self,pc,args): >>> p = csPath(2) >>> p.SetForwardVector (0, csVector3(1,0,0)) >>> p.SetPositionVector(0, csVector3(-2,0,0)) >>> p.SetUpVector (0, csVector3(0,1,0)) >>> p.SetTime (0, 0.0) >>> p.SetForwardVector (1, csVector3(-1,0,0)) >>> p.SetPositionVector(1, csVector3(2,0,0)) >>> p.SetUpVector (1, csVector3(0,1,0)) >>> p.SetTime (1, 1.0) >>> self.mover.SetPath(p) >>> Running celstart in gdb shows this call and code line to be the cause: >>> >>> 0x00007fffe1d98861 in celPcLinearMovement::ExtrapolatePosition >>> (this=0x7fffe34f8fb0, delta=0.104999997) at >>> /home/baribal/src/CEL_latest/plugins/propclass/move/linmove.cpp:1093 >>> 1093 float end_time = path->GetTime (path->Length () - 1); >> >> I looked into the generated Python bindings code. >> >> What happens is that, behind the scenes, a “csPath*” is stored inside p. >> So when p gets out of scope, a “delete” is done on the stored pointer. >> Obviously this is wrong, since the SetPath() call stores a reference to >> ”p”. (It takes an iPath*.) >> >> What _should_ happen is that, behind the scenes, a “csRef<>” should be >> stored in p (resp. that, instead of a ”delete”, DecRef() should be used >> when p is destroyed). >> SWIG probably allows that. However, I have no idea to actually do that. > > Perhaps an explicit csPath -> iPath typemap is needed. The typemap would > make a local reference-counted copy of the input csPath, hand the copy > to low-level SetPath(), and then decrement its own reference to the > copy. The original input csPath can then go out of scope without causing > harm to the path ultimately handed to setPath().
More specifically, the output of the csPath -> iPath typemap would likely have to be a csPtr<iPath> wrapping the copy for this to work. -- ES ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Cel-main mailing list Cel-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/cel-main