Layers don't get deallocated from memory when deleted
- Dominant language
- Wolfram Language
- Stars
- 905
- Forks
- 223
- Avg merge
- 2d 9h
- Merged PRs (30d)
- 17
Description
**Linux, Maya 2024.2, maya-usd 0.25.0**
When a layer is inserted in a maya-usd composition arc, it won't get deallocated from memory when deleted
```py
import os
import gc
from pxr import Sdf
import maya.cmds as mc
import mayaUsd
# get home path and set layer name
path = os.path.join(os.path.expanduser('~'), "test1.usda")
# create usd stage
stageShape = mc.createNode('mayaUsdProxyShape')
stageShape = mc.ls(stageShape, long=True)[0]
mc.connectAttr('time1.outTime', stageShape + ".time")
stage = mayaUsd.ufe.getStage(stageShape)
# create first layer and save it
layer1 = Sdf.Layer.CreateNew(path)
layer1.Save()
# add layer to stage
rootLayer = stage.GetRootLayer()
rootLayer.subLayerPaths.append(layer1)
# delete .usda and layer
rootLayer.subLayerPaths = []
os.remove(path)
del layer1
gc.collect()
# create second layer with same path
layer2 = Sdf.Layer.CreateNew(path)
layer2.Save()
```
In the example above the creation of `layer2` will raise an exception, because `layer1` is still present in memory.
The same thing doesn't happen if we do it all via USD
```py
import os
import gc
from pxr import Sdf, Usd
# get home path and set layer name
path = os.path.join(os.path.expanduser('~'), "test2.usda")
# create usd stage
stage = Usd.Stage.CreateInMemory()
# create first layer and save it
layer1 = Sdf.Layer.CreateNew(path)
layer1.Save()
# add layer to stage
rootLayer = stage.GetRootLayer()
rootLayer.subLayerPaths.append(layer1.identifier)
# delete .usda and layer
rootLayer.subLayerPaths = []
os.remove(path)
del layer1
gc.collect()
# create second layer with same path
layer2 = Sdf.Layer.CreateNew(path)
layer2.Save()
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.