PrpShop: Deleting an object crashes
-
- Deep Island Admin
- Posts: 2972
- Joined: Mon May 05, 2008 5:50 am
- MOULa KI#: 0
- Location: Germany
Re: PrpShop: Deleting an object crashes
After you last commit, I opened and saved the problematic file again, and after opening again, the empty category is gone. Did I understand it correctly that it now removed all references to the removed objects? But the objects which contain these references are still there?
I prefer e-mails to "diafero arcor de" (after adding the at and the dot) over PMs.
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
- Zrax
- Posts: 206
- Joined: Fri Sep 28, 2007 5:19 pm
- MOULa KI#: 0
- Location: Waist-deep in a conecano
- Contact:
Re: PrpShop: Deleting an object crashes
The current revision won't write the invalid key to the keyring any more, but that doesn't mean that the references to the key are gone. You can currently look in the PrpShop.log file to see if there are any keys that are being referenced that don't exist (but it won't show you where they're referenced from, since that's quite a bit more complex to do).
-
- Deep Island Admin
- Posts: 2972
- Joined: Mon May 05, 2008 5:50 am
- MOULa KI#: 0
- Location: Germany
Re: PrpShop: Deleting an object crashes
Ok, so obviously some references are left, I get a message about two "erroneous keys". However, I first had to revert commit 290 of libPlasma ("PyPlasmified plInterfaceInfoModifier") - with it applied, PrpShop crashes while opening the file.
EDIT: Using prcdc, I found the two remaining references (they were in the SceneNode) and removed them, now I no longer get an error. libnPlasma r260 still causes PrpShop to crash while opening it though.
EDIT 2: I had to do "make clean && make" in PlasmaShop, now PrpShop no longer crashes (obviously it did not detect the API change so it didn't recompile - just "make" did nothing).
That warning is really useful, thanks a lot! Would it be possible to add some way of getting to it using the GUI? It could even be some general debug console which shows the log file, or at least some hint like "there is an error in the log file, go and check it".
EDIT: Using prcdc, I found the two remaining references (they were in the SceneNode) and removed them, now I no longer get an error. libnPlasma r260 still causes PrpShop to crash while opening it though.
EDIT 2: I had to do "make clean && make" in PlasmaShop, now PrpShop no longer crashes (obviously it did not detect the API change so it didn't recompile - just "make" did nothing).
That warning is really useful, thanks a lot! Would it be possible to add some way of getting to it using the GUI? It could even be some general debug console which shows the log file, or at least some hint like "there is an error in the log file, go and check it".
I prefer e-mails to "diafero arcor de" (after adding the at and the dot) over PMs.
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
- Zrax
- Posts: 206
- Joined: Fri Sep 28, 2007 5:19 pm
- MOULa KI#: 0
- Location: Waist-deep in a conecano
- Contact:
Re: PrpShop: Deleting an object crashes
1) What you're seeing here is that some of libPlasma's header's have changed between builds; PrpShop will need to be re-linked when this happens, or it will cause the crashes you see. Sometimes I also make changes that will require libPlasma to be mostly rebuilt, but unfortunately I'm too lazy to get all of the header dependancy sorted out on the Linux and OSX makefiles, so doing a make clean when things break is usually the easiest way to fix that ^_^. The Windows project files will (usually) automatically rebuild dependancies though, so it's less of a worry.
2) I'm working on a key reference tracer script in Python (PyPlasma) which should help find those lingering key references. Unfortunately, there are still a lot of classes not exposed to PyPlasma, but so far it's working pretty well... For example, on the file you sent me, tracing the (deleted) audio interface produces this dependancy tree so far:
2) I'm working on a key reference tracer script in Python (PyPlasma) which should help find those lingering key references. Unfortunately, there are still a lot of classes not exposed to PyPlasma, but so far it's working pretty well... For example, on the file you sent me, tracing the (deleted) audio interface produces this dependancy tree so far:
Code: Select all
$ ./tracekey.py DescentMystV_District_dsntFootRgns.prp plAudioInterface MusicEmitter
MusicEmitter [plAudioInterface]
Region.004_SndRgn [plResponderModifier]
Region.004 [plSceneObject]
DescentMystV_District_FootRgns [plSceneNode]
CaveStep05.001 [plSceneObject]
CaveStep05.001 [plCoordinateInterface]
CaveStep05.001 [plSimulationInterface]
CaveStep05coll [plSceneObject]
CaveStep05coll [plSimulationInterface]
Cylinder [plSceneObject]
Cylinder [plCoordinateInterface]
Cylinder [plSimulationInterface]
Cylinder.001 [plSceneObject]
Cylinder.001 [plCoordinateInterface]
Cylinder.001 [plSimulationInterface]
DesertRockSmall05coll [plSceneObject]
DesertRockSmall05coll [plSimulationInterface]
DesertRockSmall07coll [plSceneObject]
DesertRockSmall07coll [plSimulationInterface]
DesertRockSmall08coll [plSceneObject]
DesertRockSmall08coll [plSimulationInterface]
DesertRockSmall09coll [plSceneObject]
DesertRockSmall09coll [plSimulationInterface]
DesertRockSmall10coll [plSceneObject]
DesertRockSmall10coll [plSimulationInterface]
DesertRockSmall12.001 [plSceneObject]
DesertRockSmall12.001 [plSimulationInterface]
DesertRockSmall13coll [plSceneObject]
DesertRockSmall13coll [plSimulationInterface]
DesertRockSmall14coll [plSceneObject]
DesertRockSmall14coll [plSimulationInterface]
DesertRockSmall18coll [plSceneObject]
DesertRockSmall18coll [plSimulationInterface]
DesertRockSmall19coll [plSceneObject]
DesertRockSmall19coll [plSimulationInterface]
DesertRockSmall22coll [plSceneObject]
DesertRockSmall22coll [plSimulationInterface]
EntrFtStp [plSceneObject]
EntrFtStp [plCoordinateInterface]
EntrFtStp [plSimulationInterface]
FootStepRgn [plSceneObject]
FootStepRgn [plCoordinateInterface]
FootStepRgn [plSimulationInterface]
FootStepRgn.001 [plSceneObject]
FootStepRgn.001 [plCoordinateInterface]
FootStepRgn.001 [plSimulationInterface]
FootStepRgn.002 [plSceneObject]
FootStepRgn.002 [plCoordinateInterface]
FootStepRgn.002 [plSimulationInterface]
FootStepRgn.003 [plSceneObject]
FootStepRgn.003 [plCoordinateInterface]
FootStepRgn.003 [plSimulationInterface]
FootStepRgn.004 [plSceneObject]
FootStepRgn.004 [plCoordinateInterface]
FootStepRgn.004 [plSimulationInterface]
FootStepRgn.005 [plSceneObject]
FootStepRgn.005 [plCoordinateInterface]
FootStepRgn.005 [plSimulationInterface]
FootStepRgn.006 [plSceneObject]
FootStepRgn.006 [plCoordinateInterface]
FootStepRgn.006 [plSimulationInterface]
FootStepRgn.007 [plSceneObject]
FootStepRgn.007 [plCoordinateInterface]
FootStepRgn.007 [plSimulationInterface]
FootStepRgn.008 [plSceneObject]
FootStepRgn.008 [plCoordinateInterface]
FootStepRgn.008 [plSimulationInterface]
FootStepRgn.009 [plSceneObject]
FootStepRgn.009 [plCoordinateInterface]
FootStepRgn.009 [plSimulationInterface]
FootStepRgn.010 [plSceneObject]
FootStepRgn.010 [plCoordinateInterface]
FootStepRgn.010 [plSimulationInterface]
FootStepRgn.011 [plSceneObject]
FootStepRgn.011 [plCoordinateInterface]
FootStepRgn.011 [plSimulationInterface]
FootStepRgn.012 [plSceneObject]
FootStepRgn.012 [plCoordinateInterface]
FootStepRgn.012 [plSimulationInterface]
FootStepRgn.013 [plSceneObject]
FootStepRgn.013 [plCoordinateInterface]
FootStepRgn.013 [plSimulationInterface]
FootStepRgn.014 [plSceneObject]
FootStepRgn.014 [plCoordinateInterface]
FootStepRgn.014 [plSimulationInterface]
FootStepRgn.015 [plSceneObject]
FootStepRgn.015 [plCoordinateInterface]
FootStepRgn.015 [plSimulationInterface]
FootStepRgn.016 [plSceneObject]
FootStepRgn.016 [plCoordinateInterface]
FootStepRgn.016 [plSimulationInterface]
FootStepRgn.017 [plSceneObject]
FootStepRgn.017 [plCoordinateInterface]
FootStepRgn.017 [plSimulationInterface]
FootStepRgn.018 [plSceneObject]
FootStepRgn.018 [plCoordinateInterface]
FootStepRgn.018 [plSimulationInterface]
FootStepRgn.019 [plSceneObject]
FootStepRgn.019 [plCoordinateInterface]
FootStepRgn.019 [plSimulationInterface]
FootStepRgn.020 [plSceneObject]
FootStepRgn.020 [plCoordinateInterface]
FootStepRgn.020 [plSimulationInterface]
Handle Collider [plSceneObject]
Handle Collider [plSimulationInterface]
Handle Collider.001 [plSceneObject]
Handle Collider.001 [plSimulationInterface]
Ladder [plSceneObject]
Ladder [plCoordinateInterface]
Ladder [plSimulationInterface]
LwrTunlFtstp [plSceneObject]
LwrTunlFtstp [plCoordinateInterface]
LwrTunlFtstp [plSimulationInterface]
LwrTunlFtstp.001 [plSceneObject]
LwrTunlFtstp.001 [plCoordinateInterface]
LwrTunlFtstp.001 [plSimulationInterface]
LwrTunlFtstp.002 [plSceneObject]
LwrTunlFtstp.002 [plCoordinateInterface]
LwrTunlFtstp.002 [plSimulationInterface]
RefGeo02.001 [plSceneObject]
RefGeo02.001 [plSimulationInterface]
Region [plSceneObject]
Region [plSimulationInterface]
Region.001 [plSceneObject]
Region.001 [plSimulationInterface]
RestFtstp [plSceneObject]
RestFtstp [plCoordinateInterface]
RestFtstp [plSimulationInterface]
Rock115coll [plSceneObject]
Rock115coll [plSimulationInterface]
Rock118.001 [plSceneObject]
Rock118.001 [plSimulationInterface]
Rock121.001 [plSceneObject]
Rock121.001 [plSimulationInterface]
Rock129.001 [plSceneObject]
Rock129.001 [plSimulationInterface]
Rock129.002 [plSceneObject]
Rock129.002 [plSimulationInterface]
RungRgn [plSceneObject]
RungRgn [plCoordinateInterface]
RungRgn [plSimulationInterface]
RungRgn.001 [plSceneObject]
RungRgn.001 [plCoordinateInterface]
RungRgn.001 [plSimulationInterface]
RungRgn.002 [plSceneObject]
RungRgn.002 [plCoordinateInterface]
RungRgn.002 [plSimulationInterface]
SfxRegSenDsnt-Stone [plSceneObject]
SfxRegSenDsnt-Stone [plCoordinateInterface]
SfxRegSenDsnt-Stone [plSimulationInterface]
SfxRegSenFeet-Stone [plSceneObject]
SfxRegSenFeet-Stone [plCoordinateInterface]
SfxRegSenFeet-Stone [plSimulationInterface]
ShaftFtstp [plSceneObject]
ShaftFtstp [plCoordinateInterface]
ShaftFtstp [plSimulationInterface]
TunnelFtstp [plSceneObject]
TunnelFtstp [plCoordinateInterface]
TunnelFtstp [plSimulationInterface]
TunnelFtstp.001 [plSceneObject]
TunnelFtstp.001 [plCoordinateInterface]
TunnelFtstp.001 [plSimulationInterface]
TunnelFtstp.002 [plSceneObject]
TunnelFtstp.002 [plCoordinateInterface]
TunnelFtstp.002 [plSimulationInterface]
TunnelFtstp.003 [plSceneObject]
TunnelFtstp.003 [plCoordinateInterface]
TunnelFtstp.003 [plSimulationInterface]
TunnelFtstp.004 [plSceneObject]
TunnelFtstp.004 [plCoordinateInterface]
TunnelFtstp.004 [plSimulationInterface]
UpperTunlFtstp [plSceneObject]
UpperTunlFtstp [plCoordinateInterface]
UpperTunlFtstp [plSimulationInterface]
UpperTunlFtstp.001 [plSceneObject]
UpperTunlFtstp.001 [plCoordinateInterface]
UpperTunlFtstp.001 [plSimulationInterface]
VolcanoFtstp [plSceneObject]
VolcanoFtstp [plCoordinateInterface]
VolcanoFtstp [plSimulationInterface]
VolcanoFtstp.001 [plSceneObject]
VolcanoFtstp.001 [plCoordinateInterface]
VolcanoFtstp.001 [plSimulationInterface]
VolcanoFtstp.002 [plSceneObject]
VolcanoFtstp.002 [plCoordinateInterface]
VolcanoFtstp.002 [plSimulationInterface]
VolcanoFtstp.003 [plSceneObject]
VolcanoFtstp.003 [plCoordinateInterface]
VolcanoFtstp.003 [plSimulationInterface]
VolcanoFtstp.004 [plSceneObject]
VolcanoFtstp.004 [plCoordinateInterface]
VolcanoFtstp.004 [plSimulationInterface]
VolcanoFtstp.005 [plSceneObject]
VolcanoFtstp.005 [plCoordinateInterface]
VolcanoFtstp.005 [plSimulationInterface]
WaterRgn [plSceneObject]
WaterRgn [plCoordinateInterface]
WaterRgn [plSimulationInterface]
WaterRgn.002 [plSceneObject]
WaterRgn.002 [plCoordinateInterface]
WaterRgn.002 [plSimulationInterface]
Region.004 [plCoordinateInterface]
Region.004 [plSimulationInterface]
-
- Deep Island Admin
- Posts: 2972
- Joined: Mon May 05, 2008 5:50 am
- MOULa KI#: 0
- Location: Germany
Re: PrpShop: Deleting an object crashes
Ok, that is about what I thought, too, but it took me a while to figure that out1) What you're seeing here is that some of libPlasma's header's have changed between builds; PrpShop will need to be re-linked when this happens, or it will cause the crashes you see. Sometimes I also make changes that will require libPlasma to be mostly rebuilt, but unfortunately I'm too lazy to get all of the header dependancy sorted out on the Linux and OSX makefiles, so doing a make clean when things break is usually the easiest way to fix that ^_^. The Windows project files will (usually) automatically rebuild dependancies though, so it's less of a worry.

The output seems to confirm what I already feared - if you remove one object and everything it references to and is referenced by, you end up removing the whole prp file since the plSceneNode references each plSceneObject (and perhaps the other way round, too). Of course one could stop doing recursion when you hit a plSceneNode and just remove the reference to the plSceneObject you removed, but I'm not sure if hardcoding something like that is a good idea. I will test your script as soon as you think it can be released2) I'm working on a key reference tracer script in Python (PyPlasma) which should help find those lingering key references. Unfortunately, there are still a lot of classes not exposed to PyPlasma, but so far it's working pretty well... For example, on the file you sent me, tracing the (deleted) audio interface produces this dependancy tree so far:

I prefer e-mails to "diafero arcor de" (after adding the at and the dot) over PMs.
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
- Zrax
- Posts: 206
- Joined: Fri Sep 28, 2007 5:19 pm
- MOULa KI#: 0
- Location: Waist-deep in a conecano
- Contact:
Re: PrpShop: Deleting an object crashes
It's generally better to remove the references within an object rather than amputating out half the PRP... 
In any case, I included the work I've done so far on the ref tracer script into revision 292... Like I say, it's still incomplete, but it looks through most of the major classes at least.

In any case, I included the work I've done so far on the ref tracer script into revision 292... Like I say, it's still incomplete, but it looks through most of the major classes at least.
-
- Deep Island Admin
- Posts: 2972
- Joined: Mon May 05, 2008 5:50 am
- MOULa KI#: 0
- Location: Germany
Re: PrpShop: Deleting an object crashes
Cool 
Now, how do I have Python knowing PyPlasma? I get

Now, how do I have Python knowing PyPlasma? I get
Code: Select all
ImportError: No module named PyPlasma
I prefer e-mails to "diafero arcor de" (after adding the at and the dot) over PMs.
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
Re: PrpShop: Deleting an object crashes
Have the .py script in the same dir as PyPlasma.pyd.
Another way is to put PyPlasma.pyd in the global import dirs in your Python install. I know for a fact that it works if put in either /Lib or /DLLs (DLLs might be called something else under Linux
).
If you're in a Python terminal you might be able to change the current running path to be in a dir with your PyPlasma.pyd.
Another way is to put PyPlasma.pyd in the global import dirs in your Python install. I know for a fact that it works if put in either /Lib or /DLLs (DLLs might be called something else under Linux

If you're in a Python terminal you might be able to change the current running path to be in a dir with your PyPlasma.pyd.
Currently getting some ink on my hands over at the Guild Of Ink-Makers (PyPRP2).
-
- Deep Island Admin
- Posts: 2972
- Joined: Mon May 05, 2008 5:50 am
- MOULa KI#: 0
- Location: Germany
Re: PrpShop: Deleting an object crashes
Thanks for the quick reply 
) . Do I have to specify some make arguments or something like that for it to be built?

I don't have such a file anywhere in my Plasma directory, all I got is a PyPlasma.so in the bin/ directory, and executing the Python script in there still gives me the same error. Renaming it doesn't help (I didn't expect it to, anywayHave the .py script in the same dir as PyPlasma.pyd.

I prefer e-mails to "diafero arcor de" (after adding the at and the dot) over PMs.
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
"Many people's horizon is a circle with a radius of zero. They call it their point of view."
Deep Island Shard | Offline KI
- Zrax
- Posts: 206
- Joined: Fri Sep 28, 2007 5:19 pm
- MOULa KI#: 0
- Location: Waist-deep in a conecano
- Contact:
Re: PrpShop: Deleting an object crashes
Only the Windows version names the file .pyd -- it's called PyPlasma.so on Linux. Paradox kept bugging me about putting the file in a "standard" location, so running "sudo make install" should put it in your python libs dir, assuming the method I used is as universal as I hope it is
. That will also ensure that libPlasma.so is in a location that PyPlasma can access it.
