Skip to content

Instantly share code, notes, and snippets.

@mottosso
Last active April 7, 2021 10:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mottosso/c183b7a70cd808b810c0be5f5ea94e97 to your computer and use it in GitHub Desktop.
Save mottosso/c183b7a70cd808b810c0be5f5ea94e97 to your computer and use it in GitHub Desktop.
Maya 2022 crash - dagItem was nullptr

Here's a vanilla, no-tricks plug-in that crashes Maya on deletion.

  • I suspect hierarchy is involved
  • I suspect the newly added MDGModifier.deleteNode(includeParents=True) flag to be involved
  • I suspect a mixup in libraries between Python 2 and 3 (see _OpenMaya_py2.pyd below)

Reproduce

Deleting the top-level node or saving the scene causes a crash.

from maya import cmds

cmds.loadPlugin(r"C:\ragdoll\build\ragdoll.mll")
scene = r"C:\ragdoll\crash_example.ma"
cmds.file(scene, open=True, force=True)

# Get ready to crash
cmds.delete("_:FKParentConstraintToScapula_R")

The crash only occurs with a custom plug-in loaded. Loading the scene without loading the plug-in does not cause a crash.


Build & Run

From Powershell.

cd c:\
git clone https://gist.github.com/c183b7a70cd808b810c0be5f5ea94e97.git ragdoll
mkdir ragdoll/build
cd ragdoll/build
$env:DEVKIT_LOCATION="c:\path\to\your\devkit"
cmake .. -G Ninja
ninja

Traceback

image image

Stack trace:
  OGSMayaBridge.dll!TdrawingChangeManager::drawableRemoved
  OGSMayaBridge.dll!TdrawingChangeManager::doModelNodeRemoved
  OGSMayaBridge.dll!DrawingChange::Tmonitor::parentRemovedCB
  Foundation.dll!TclientServer::notifyClients
  Foundation.dll!TdelayedClientServer::notifyClients
  DataModel.dll!TdagObject::removeParent
  DataModel.dll!TdagObject::removeChildAt
  DataModel.dll!Ttransform::removeChildAt
  DataModel.dll!Tmodel::removeLeafNodeFromModel
  DataModel.dll!TdagDGcommandHelper::resetSetsInformation
  DataModel.dll!TcmdOperation::doIt
  DependEngine.dll!TDGcommand::doSomeDG
  DependEngine.dll!TDGcommand::doDG
  DataModel.dll!TdagDGcommandHelper::newNodeToRemoveImp
  DataModel.dll!TdagDGcommand::newNodeToRemove
  DependEngine.dll!TDGcommand::newNodeToDelete
  OpenMaya.dll!Autodesk::Maya::OpenMaya20220000::MDGModifier::deleteNode
  _OpenMaya_py2.pyd!MPyMUserEventMessage_Type::typeObj
  python37.dll!_PyMethodDef_RawFastCallKeywords
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyEval_EvalCodeWithName
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyEval_EvalCodeWithName
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyEval_EvalCodeWithName
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyEval_EvalCodeWithName
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
  python37.dll!_PyEval_EvalCodeWithName
  python37.dll!_PyFunction_FastCallDict
  python37.dll!_PyEval_EvalFrameDefault
00007FFE05329E10
#-
# ==========================================================================
# Copyright (c) 2018 Autodesk, Inc.
# All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# unpublished proprietary information written by Autodesk, Inc., and are
# protected by Federal copyright law. They may not be disclosed to third
# parties or copied or duplicated in any form, in whole or in part, without
# the prior written consent of Autodesk, Inc.
# ==========================================================================
#+
cmake_minimum_required(VERSION 2.8)
# include the project setting file
include($ENV{DEVKIT_LOCATION}/cmake/pluginEntry.cmake)
# specify project name
set(PROJECT_NAME ragdoll)
# set SOURCE_FILES
set(SOURCE_FILES
ragdoll.cpp
)
# set linking libraries
set(LIBRARIES
OpenMaya
OpenMayaUI
Foundation
)
# Build plugin
build_plugin()
//Maya ASCII 2022 scene
//Name: temp7.ma
//Last modified: Wed, Apr 07, 2021 07:28:29 AM
//Codeset: 1252
requires maya "2022";
requires "mtoa" "4.0.4.1";
requires -nodeType "rdRigid"
"ragdoll" "3.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2022";
fileInfo "version" "2022";
fileInfo "cutIdentifier" "202102181415-29bfc1879c";
fileInfo "osv" "Windows 10 Pro v2009 (Build: 19042)";
fileInfo "UUID" "5616CDBF-459E-3240-A25D-2D9C40BD2013";
createNode transform -s -n "persp";
rename -uid "DE3B6AF5-4E61-8D5D-EF4F-5FB40BAC9810";
setAttr ".v" no;
setAttr ".t" -type "double3" -10.04336269164601 18.250820379935291 19.830451615252425 ;
setAttr ".r" -type "double3" -22.538352729603268 -25.000000000000899 8.7733845139491282e-16 ;
createNode camera -s -n "perspShape" -p "persp";
rename -uid "E8D06F64-412D-C192-347F-94A5994B0270";
setAttr -k off ".v" no;
setAttr ".fl" 34.999999999999993;
setAttr ".coi" 26.513611592994806;
setAttr ".imn" -type "string" "persp";
setAttr ".den" -type "string" "persp_depth";
setAttr ".man" -type "string" "persp_mask";
setAttr ".hc" -type "string" "viewSet -p %camera";
createNode transform -s -n "top";
rename -uid "5CA29B30-4235-76A7-7208-E18BE3D2ACA9";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 1000.1 0 ;
setAttr ".r" -type "double3" -90 0 0 ;
createNode camera -s -n "topShape" -p "top";
rename -uid "F415F4D9-4D9A-39B1-CAC3-1EA771E6C114";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 1000.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "top";
setAttr ".den" -type "string" "top_depth";
setAttr ".man" -type "string" "top_mask";
setAttr ".hc" -type "string" "viewSet -t %camera";
setAttr ".o" yes;
createNode transform -s -n "front";
rename -uid "DA9A0429-4A39-4E75-58B3-9A8152265025";
setAttr ".v" no;
setAttr ".t" -type "double3" 0 0 1000.1 ;
createNode camera -s -n "frontShape" -p "front";
rename -uid "154707DC-4EB5-5168-2609-DEAC72252187";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 1000.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "front";
setAttr ".den" -type "string" "front_depth";
setAttr ".man" -type "string" "front_mask";
setAttr ".hc" -type "string" "viewSet -f %camera";
setAttr ".o" yes;
createNode transform -s -n "side";
rename -uid "3B6C9342-4965-77F0-76D3-C6A0A181C2D3";
setAttr ".v" no;
setAttr ".t" -type "double3" 1000.1 0 0 ;
setAttr ".r" -type "double3" 0 90 0 ;
createNode camera -s -n "sideShape" -p "side";
rename -uid "F6771AEF-49F1-F839-08F2-E49C0BB0B5F1";
setAttr -k off ".v" no;
setAttr ".rnd" no;
setAttr ".coi" 1000.1;
setAttr ".ow" 30;
setAttr ".imn" -type "string" "side";
setAttr ".den" -type "string" "side_depth";
setAttr ".man" -type "string" "side_mask";
setAttr ".hc" -type "string" "viewSet -s %camera";
setAttr ".o" yes;
createNode transform -n "_:FKParentConstraintToScapula_R";
rename -uid "80531D33-40AF-61BC-0DE7-919692871796";
setAttr ".ihi" 0;
setAttr ".t" -type "double3" -0.43653594851735333 13.707000000000031 -0.1669999999999999 ;
setAttr ".r" -type "double3" 90.007460834260371 0.017994272680599804 -179.98873312112326 ;
setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000002 1.0000000000000002 ;
createNode transform -n "_:FKOffsetShoulder_R" -p "_:FKParentConstraintToScapula_R";
rename -uid "9E630F5A-4E0D-39F7-11FB-0CBEAA9697A6";
setAttr ".ihi" 0;
setAttr ".ove" yes;
setAttr ".t" -type "double3" 1.0925408230395584 -5.5372373353179682e-14 -1.5987211554602254e-14 ;
setAttr ".r" -type "double3" -0.00030317373168950099 -0.011639807983327836 -2.9840095359277368 ;
setAttr ".ro" 5;
setAttr ".s" -type "double3" 1.0000000000000002 1 1 ;
createNode transform -n "_:FKExtraShoulder_R" -p "_:FKOffsetShoulder_R";
rename -uid "5CA8DEE8-4886-31BC-8C57-C59F5EB96A3F";
setAttr -l on -k off ".v";
setAttr ".sech" no;
setAttr ".ro" 5;
setAttr -l on -k off ".sx";
setAttr -l on -k off ".sy";
setAttr -l on -k off ".sz";
createNode transform -n "_:FKShoulder_R" -p "_:FKExtraShoulder_R";
rename -uid "339E918A-4F49-3FB8-9770-E2A350F8F5AA";
addAttr -ci true -sn "autoTwist" -ln "autoTwist" -dv 10 -min 0 -max 10 -at "double";
addAttr -ci true -sn "extraTwist" -ln "extraTwist" -at "double";
addAttr -ci true -k true -sn "mass" -ln "mass" -dv 1 -at "double";
addAttr -ci true -k true -sn "angularDriveStiffness" -ln "angularDriveStiffness"
-nn "Stiffness" -dv 10000 -at "double";
addAttr -ci true -k true -sn "ragdoll" -ln "Ragdoll" -nn " " -min 0 -max 0 -en "Ragdoll"
-at "enum";
addAttr -ci true -k true -sn "angularDriveDamping" -ln "angularDriveDamping" -nn "Damping"
-dv 1000 -at "double";
setAttr ".sech" no;
setAttr ".ro" 5;
setAttr ".smd" 2;
setAttr -k on ".mass";
setAttr -k on ".angularDriveStiffness";
setAttr -k on ".ragdoll";
setAttr -k on ".angularDriveDamping";
createNode nurbsCurve -n "_:FKShoulder_RShape" -p "_:FKShoulder_R";
rename -uid "53AB1A77-44E6-81EA-CE23-72BD2FDC960D";
setAttr ".ihi" 0;
setAttr -k off ".v";
setAttr ".ove" yes;
setAttr ".ovc" 18;
setAttr ".cc" -type "nurbsCurve"
3 8 2 no 3
13 -2 -1 0 1 2 3 4 5 6 7 8 9 10
11
0 -0.76402133426894436 -0.76402133426894325
0 1.2327309846344599e-16 -1.0804893328655283
0 0.7640213342689437 -0.7640213342689437
-4.3298697960381109e-16 1.0804893328655283 -3.3677556736560328e-16
0 0.76402133426894392 0.76402133426894359
0 3.6383725359084151e-16 1.0804893328655285
0 -0.76402133426894348 0.7640213342689437
4.3298697960381109e-16 -1.0804893328655283 5.8033074339274695e-16
0 -0.76402133426894436 -0.76402133426894325
0 1.2327309846344599e-16 -1.0804893328655283
0 0.7640213342689437 -0.7640213342689437
;
createNode rdConstraint -n "rSocketConstraint8" -p "_:FKShoulder_R";
rename -uid "94B9CCAB-4690-C125-1665-6A94C492AFCF";
setAttr -k off ".v";
setAttr ".vers" 20210329;
setAttr ".pafr" -type "matrix" 0.99864408150127382 -0.052057249364014041 0.00020315297217830071 0
-0.052057645763876434 -0.99863647719318915 0.0038971703452311207 0 -8.2134728722770044e-15 -0.0039024617653289611 -0.99999238536709367 0
1.092540823039559 1.1886602813149239e-12 -1.4210854715202004e-14 1;
setAttr ".chfr" -type "matrix" 0.99999999999999933 -1.7486012637846216e-15 -5.0145438914791802e-14 0
-1.5334955527634975e-15 -0.99999238536709489 0.0039024617649741902 0 -5.1793665927293842e-14 -0.0039024617649744899 -0.99999238536709489 0
4.4408920985006262e-16 1.3877787807814457e-17 3.5527136788005009e-15 1;
setAttr ".type" 4;
setAttr ".dico" 1;
setAttr ".lien" 1;
setAttr ".lstr" 1;
setAttr -k on ".lilx";
setAttr -k on ".lily";
setAttr -k on ".lilz";
setAttr ".anlm" -type "double3" 0 0 0 ;
setAttr -k on ".anlx";
setAttr -k on ".anly";
setAttr -k on ".anlz";
setAttr ".dren" 1;
setAttr -k on ".dstr" 0.5;
setAttr -k on ".lids" 0;
setAttr -k on ".lidd" 0;
setAttr -k on ".ands";
setAttr -k on ".andd";
setAttr ".drsc" 1.5917434692382812;
setAttr -s 2 ".usat";
setAttr ".tamx" -type "matrix" 0.99864408150127471 -0.052057249364012327 0.00020315297222851521 0
0.052057249364012376 0.99864410215083899 5.2913794507834441e-06 0 -0.00020315297221161512 5.2913801626500178e-06 0.99999997935043572 0
1.0925408230395588 1.1885492590124613e-12 -1.5987211554602254e-14 1;
createNode rdRigid -n "rRigid9" -p "_:FKShoulder_R";
rename -uid "EE8DCD78-4AC7-3D29-FCC4-7B85D9C5BD75";
setAttr -k off ".v";
setAttr ".shty" 2;
setAttr ".shex" -type "float3" 2.6142519 1.0804893 1.0804893 ;
setAttr ".shle" 2.6142518520355225;
setAttr ".shra" 0.54024463891983032;
setAttr ".shof" -type "double3" 1.3071259260177612 -2.0261570199409107e-15 -6.3948846218409017e-14 ;
setAttr ".shro" -type "double3" 179.77640484362385 2.873122108711475e-12 -1.0018747246610078e-13 ;
setAttr -k on ".shrx";
setAttr -k on ".shry";
setAttr -k on ".shrz";
setAttr ".drsh" 0;
setAttr ".vers" 20210329;
setAttr ".colo" -type "float3" 0.21000001 0.61833328 0.69999999 ;
setAttr ".carm" -type "matrix" -0.99862770248794153 5.1814699449440054e-14 -0.052370906271105688 0
-0.052370905861745101 0.00012503251311525205 0.998627694682103 0 6.5480660769432798e-06 0.9999999921834356 -0.00012486093130611051 0
-1.5290766965528058 13.706785158269291 -0.16734312260573964 1;
setAttr ".clrm" -type "matrix" 0.99999999999999989 0 0 0 0 0.99999999999999989 2.7105054312137611e-20 0
0 0 0.99999999999999989 0 8.8817841970012523e-16 9.7144514654701197e-17 5.3290705182007514e-15 1;
setAttr -s 2 ".usat";
setAttr ".kine" 0;
setAttr ".inma" -type "matrix" -0.99862770248794153 5.1814699449440054e-14 -0.052370906271105688 0
-0.052370905861745101 0.00012503251311525205 0.998627694682103 0 6.5480660769432798e-06 0.9999999921834356 -0.00012486093130611051 0
-1.5290766965528051 13.70678515826928 -0.167343122605739 1;
setAttr ".stti" 1;
createNode lightLinker -s -n "lightLinker1";
rename -uid "C145185C-4AA1-3584-B74C-BEBEBE4EC4B8";
setAttr -s 2 ".lnk";
setAttr -s 2 ".slnk";
createNode shapeEditorManager -n "shapeEditorManager";
rename -uid "386152E8-4BD6-F60A-73FD-608FD2922D72";
createNode poseInterpolatorManager -n "poseInterpolatorManager";
rename -uid "DB1C2618-46BC-AF64-67B8-378565DF0166";
createNode displayLayerManager -n "layerManager";
rename -uid "30FD079D-4242-09CD-D889-DB8464AACB86";
createNode displayLayer -n "defaultLayer";
rename -uid "FA642486-4A7D-13D2-35BB-369585CE5889";
createNode renderLayerManager -n "renderLayerManager";
rename -uid "7D3AB8EF-4034-B1B1-090B-469FBDA4A8FD";
createNode renderLayer -n "defaultRenderLayer";
rename -uid "63510C08-4534-1F0F-F0CB-EDB7A0510503";
setAttr ".g" yes;
createNode shapeEditorManager -n "_:shapeEditorManager";
rename -uid "B3DAED93-4A6E-8004-71A2-CEBD449F5A93";
createNode renderLayerManager -n "_:renderLayerManager";
rename -uid "AE09DE53-4050-4C68-B78F-8298D91231FD";
createNode renderLayer -n "_:defaultRenderLayer";
rename -uid "DD246404-4032-58B9-FC05-E2B1BCBF1345";
setAttr ".g" yes;
createNode script -n "sceneConfigurationScriptNode";
rename -uid "CEECFFAF-49EC-4CB2-40EF-DD999713349C";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 ";
setAttr ".st" 6;
select -ne :time1;
setAttr ".o" 1;
setAttr ".unw" 1;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 ;
setAttr ".fprt" yes;
select -ne :renderPartition;
setAttr -s 2 ".st";
select -ne :renderGlobalsList1;
select -ne :defaultShaderList1;
setAttr -s 5 ".s";
select -ne :postProcessList1;
setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
setAttr -s 2 ".r";
select -ne :initialShadingGroup;
setAttr ".ro" yes;
select -ne :initialParticleSE;
setAttr ".ro" yes;
select -ne :defaultRenderGlobals;
addAttr -ci true -h true -sn "dss" -ln "defaultSurfaceShader" -dt "string";
setAttr ".dss" -type "string" "lambert1";
select -ne :defaultResolution;
setAttr ".pa" 1;
select -ne :defaultColorMgtGlobals;
setAttr ".cfe" yes;
setAttr ".cfp" -type "string" "<MAYA_RESOURCES>/OCIO-configs/Maya2022-default/config.ocio";
setAttr ".wsn" -type "string" "ACEScg";
select -ne :hardwareRenderGlobals;
setAttr ".ctrs" 256;
setAttr ".btrs" 512;
connectAttr "rRigid9.outx" "_:FKShoulder_R.tx";
connectAttr "rRigid9.outy" "_:FKShoulder_R.ty";
connectAttr "rRigid9.outz" "_:FKShoulder_R.tz";
connectAttr "rRigid9.ourx" "_:FKShoulder_R.rx";
connectAttr "rRigid9.oury" "_:FKShoulder_R.ry";
connectAttr "rRigid9.ourz" "_:FKShoulder_R.rz";
connectAttr "_:FKShoulder_R.angularDriveStiffness" "rSocketConstraint8.ands";
connectAttr "_:FKShoulder_R.angularDriveDamping" "rSocketConstraint8.andd";
connectAttr "_:FKShoulder_R.angularDriveStiffness" "rSocketConstraint8.usat[0]";
connectAttr "_:FKShoulder_R.angularDriveDamping" "rSocketConstraint8.usat[1]";
connectAttr ":time1.o" "rSocketConstraint8.ctm";
connectAttr "rRigid9.raid" "rSocketConstraint8.chri";
connectAttr "_:FKShoulder_R.ragdoll" "rRigid9.usat[0]";
connectAttr "_:FKShoulder_R.mass" "rRigid9.usat[1]";
connectAttr "_:FKShoulder_RShape.l" "rRigid9.incu";
connectAttr "_:FKShoulder_R.mass" "rRigid9.mass";
connectAttr "_:FKShoulder_R.ro" "rRigid9.roor";
connectAttr "_:FKShoulder_R.wm" "rRigid9.rema";
connectAttr "_:FKShoulder_R.pim" "rRigid9.ipim";
connectAttr ":time1.o" "rRigid9.cuti";
relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message";
relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message";
connectAttr "layerManager.dli[0]" "defaultLayer.id";
connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid";
connectAttr "_:renderLayerManager.rlmi[0]" "_:defaultRenderLayer.rlid";
connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
connectAttr "_:defaultRenderLayer.msg" ":defaultRenderingList1.r" -na;
// End of temp7.ma
#include <string.h>
#include <assert.h>
#include <maya/MPxLocatorNode.h>
#include <maya/MFnPlugin.h>
#include <maya/MTypeId.h>
#include <maya/MPlug.h>
#include <maya/MDataBlock.h>
#include <maya/MStreamUtils.h>
#define Print MStreamUtils::stdErrorStream
class rdRigid : public MPxLocatorNode {
public:
rdRigid();
~rdRigid() override;
MStatus compute(const MPlug& plug, MDataBlock& data) override;
void postConstructor() override;
static void* creator() { return new rdRigid(); }
static MStatus initialize();
public:
static MTypeId id;
static MString drawDbClassification;
};
MTypeId rdRigid::id(0x80012);
MString rdRigid::drawDbClassification("drawdb/geometry/rdRigid");
rdRigid::rdRigid() {}
rdRigid::~rdRigid() {}
MStatus rdRigid::initialize() {
return MS::kSuccess;
}
void rdRigid::postConstructor() {}
MStatus rdRigid::compute(const MPlug& plug, MDataBlock& datablock) {
return MS::kUnknownParameter;
}
MStatus initializePlugin(MObject obj) {
MStatus status;
MFnPlugin plugin(obj, PLUGIN_COMPANY, "3.0", "Any");
plugin.registerNode("rdRigid",
rdRigid::id,
rdRigid::creator,
rdRigid::initialize,
MPxNode::kLocatorNode,
&rdRigid::drawDbClassification);
return status;
}
MStatus uninitializePlugin(MObject obj) {
MStatus status;
MFnPlugin plugin(obj);
plugin.deregisterNode(rdRigid::id);
return status;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment