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

Reply via email to