SendModelingCommand causing Memory Leak
-
Hello! I was using modeling commands in Cinema and I ran into a strange case. It seems like using the two commands here, optimize and exploded segments are resulting in a series of memory leaks, shown at the bottom of this post.
I'm creating two polygons at overlap on an edge, so should be combined by the optimize should connect them. When acting upon those polygons I get the memory leaks, but if I use the indicated modified point locations, then the polygons don't touch, and thereby don't get connected and there are no memory leaks.
As far as I'm aware I'm correctly freeing what I should. I'm running this in GVO.
As addition strangeness, the memory leaks don't occur in R20.
Is this a possible bug or am I failing to free something that I should be?
PolygonObject* polyObj = PolygonObject::Alloc(8,2); polyObj->ResizeObject(8,2); CPolygon* polys = polyObj->GetPolygonW(); Vector* points = polyObj->GetPointW(); //building two polygons that overlap in the center, this means the Optimize command has something to do. //when this is run there is a long series of memory leaks //if instead the non-overlap points are used(commented out below), Optimize has nothing to do and then the memory leaks do not appear. polys[0].a =0; polys[0].b =1; polys[0].c =2; polys[0].d =3; polys[1].a =4; polys[1].b =5; polys[1].c =6; polys[1].d =7; points[0] = Vector(0,0,0); //points[0] = Vector(0,0,50);//non-overlap point points[1] = Vector(100,0,0); points[2] = Vector(100,100,0); points[3] = Vector(0,100,0); //points[3] = Vector(0,100,50);//non-overlap point points[4] = Vector(0,0,0); points[5] = Vector(-100,0,0); points[6] = Vector(-100,100,0); points[7] = Vector(0,100,0); ModelingCommandData mcdOptimize; BaseDocument* modelCommandDoc = BaseDocument::Alloc(); mcdOptimize.doc = modelCommandDoc; mcdOptimize.op = polyObj; if (!SendModelingCommand(MCOMMAND_OPTIMIZE, mcdOptimize)) return BaseObject::Alloc(Onull); ModelingCommandData mdcExplodeSegments; mdcExplodeSegments.doc = modelCommandDoc; mdcExplodeSegments.op = polyObj; if (!SendModelingCommand(MCOMMAND_EXPLODESEGMENTS, mdcExplodeSegments)) { } modelCommandDoc->Free(modelCommandDoc); return polyObj;
The memory leaks:
basearray.h (181): 2 Memory leaks of 512 bytes (, first leak at 00000229826A9800) basearray.h (270): 2 Memory leaks of 24 bytes (, first leak at 0000022999E7E940) basearray.h (270): 2 Memory leaks of 896 bytes (, first leak at 0000022982C04D00) baseref.h (883): Memory leak of 48 bytes () at 000002291D5F5C40 baseref.h (885): 14 Memory leaks of 32 bytes (, first leak at 0000022999E7E9C0) c4d_alias.h (53): Memory leak of 72 bytes () at 000002293CF6BD80 ge_register.cpp (64): 2 Memory leaks of 2184 bytes (, first leak at 00000229993448C0) ge_register.cpp (112): 2 Memory leaks of 432 bytes (, first leak at 000002298269DA00) ge_register.cpp (120): 2 Memory leaks of 432 bytes (, first leak at 000002298269DC80) hashmap.h (2721): 2 Memory leaks of 256 bytes (, first leak at 00000229827C7E00) modelingbase.cpp (865): 2 Memory leaks of 8 bytes (, first leak at 0000022999172C00) modelingbase.cpp (869): 2 Memory leaks of 176 bytes (, first leak at 00000229828079C0) pluginlayer.cpp (746): 2 Memory leaks of 32 bytes (, first leak at 0000022999172E00) polygonobject.cpp (8635): 2 Memory leaks of 16 bytes (, first leak at 0000022999172D80) variabletag.cpp (366): 2 Memory leaks of 32 bytes (, first leak at 0000022999173500) variabletag.cpp (366): 2 Memory leaks of 144 bytes (, first leak at 0000022996AA8980) weakrefservices_impl.cpp (128): 4 Memory leaks of 40 bytes (, first leak at 0000022999172780) weakrefservices_impl.cpp (233): 7 Memory leaks of 40 bytes (, first leak at 0000022999173200) 18 blocks not freed
-
Hey @d_schmidt,
Thank you for reaching out to us. It looks like your
polyObj
is leaking there, yourmodelCommandDoc
is also leaking. The leak message is coming from the point data (managed by a variable tag) which is handled as a copy on write reference since 2024. It is not completely out of the question that there is also a bug inSMC
, but I would check your stuff first.When your
SendModelingCommand
fails, you return a newOnull
but neither unwindpolyObj
normodelCommandDoc
. You must either use AutoAlloc to have scope based automated memory management or use finally. When you useAutoAlloc
, you must make sure to release it when you turn over ownership (by inserting something into a document or returning it as a cache). When you use finally, basically the same applies, you must make sure not to accidentally free things. You can solve this with a boolhadError
, or with our error system, where you then would not needAutoAlloc
orfinally
./// Demonstrates how to use errors to free memory on failure (I wrote this blindly in a text editor /// with out a compiler, so this more a sketch). BaseObject* DoStuff(const Int bestNumber) { PolygonObject* const obj = PolygonObject::Alloc(8, 2); // This is how the function is exited when we return a maxon::Error. We have access to everything // which has been declared before this scope (and the Error err). Here we print the error, free // obj (because in an error case it is always not needed anymore) and return Onull. If you want // to finetune this, because you do not always want to return Onull for example, you can also have // multiple error scopes. iferr_scope_handler { DiagnosticOutput("@: @", MAXON_FUNCTIONNAME, err); PolygonObject::Free(obj); return BaseObject::Alloc(Onull); } // Something goes wrong in our code, we terminate irregularly and throw an error. If this would // be a function of return type maxon::Result<T>, we could propagate the error to the outside. But // since it is not, it will terminate in th error handler above. if (bestNumber != 42) return maxon::UnexpectedError(MAXON_SOURCE_LOCATION, ""_s); // The function terminates regularly. return obj; }
PS: You also never insert
polyObj
intomodelCommandDoc
which not only makes the document pointless but can also lead to other problems. A SMC operand should always be part of a document (Cinema 4D will rectify this for you under the hood, but there is no guarantee that there is no weird corner case where things go south).When then everything goes well, make sure to call
GeListNode::Remove
onpolyObj
before you return it, as an object cannot be part of two documents at once.Cheers,
Ferdinand -
Hello @ferdinand, thanks for the response!
I think I've correctly implemented the required changes, but it seems like the memory leaks still exist.
When the polygons don't overlap on the edge they don't are correctly not present.
PolygonObject* polyObj = PolygonObject::Alloc(8,2); polyObj->ResizeObject(8,2); CPolygon* polys = polyObj->GetPolygonW(); Vector* points = polyObj->GetPointW(); //building two polygons that overlap in the center, this means the Optimize command has something to do. //when this is run there is a long series of memory leaks //if instead the non-overlap points are used(commented out below), Optimize has nothing to do and then the memory leaks dont appear. polys[0].a =0; polys[0].b =1; polys[0].c =2; polys[0].d =3; polys[1].a =4; polys[1].b =5; polys[1].c =6; polys[1].d =7; points[0] = Vector(0,0,0); //points[0] = Vector(0,0,50);//non-overlap point points[1] = Vector(100,0,0); points[2] = Vector(100,100,0); points[3] = Vector(0,100,0); //points[3] = Vector(0,100,50);//non-overlap point points[4] = Vector(0,0,0); points[5] = Vector(-100,0,0); points[6] = Vector(-100,100,0); points[7] = Vector(0,100,0); BaseDocument* modelCommandDoc = BaseDocument::Alloc(); modelCommandDoc->InsertObject(polyObj,nullptr ,nullptr ); ModelingCommandData mcdOptimize; mcdOptimize.doc = modelCommandDoc; mcdOptimize.op = polyObj; if (!SendModelingCommand(MCOMMAND_OPTIMIZE, mcdOptimize)) maxon::UnexpectedError(MAXON_SOURCE_LOCATION, ""_s); ModelingCommandData mdcExplodeSegments; mdcExplodeSegments.doc = modelCommandDoc; mdcExplodeSegments.op = polyObj; if (!SendModelingCommand(MCOMMAND_EXPLODESEGMENTS, mdcExplodeSegments)) { maxon::UnexpectedError(MAXON_SOURCE_LOCATION, ""_s); } polyObj->Remove(); BaseDocument::Free(modelCommandDoc); return polyObj; iferr_scope_handler { DiagnosticOutput("@: @", MAXON_FUNCTIONNAME, err); PolygonObject::Free(polyObj); BaseDocument::Free(modelCommandDoc); return BaseObject::Alloc(Onull); };
-
Hey @d_schmidt,
So, I gave your problem a spin and I cannot reproduce any leaks. The problem is here of course that you only provided non-compiling code, so I had to invent the rest around it, which is often counter-productive.
I also made some mistakes in my pseudo-code. For once I was missing the semicolon after the error scope handler (you already fixed that), but I should have also used
iferr_throw
and notreturn
.I have build against the
2024.0.0
SDK and debugged with2024.1.0 RC
. I started Cinema 4D with a debugger attached, instantiated an instance of the plugin, it successfully build its cache, and then I shut down Cinema 4D. I had no memory leaks reported. Find my code below.Cheers,
Ferdinandoptimizeobject.cpp
#include "c4d_baseobject.h" #include "c4d_basedocument.h" #include "c4d_general.h" #include "c4d_objectdata.h" #include "newobj.h" #include "maxon/errorbase.h" #include "ooptimizeobject.h" class OptimizeObject : public ObjectData { public: virtual Bool Init(GeListNode* node, Bool isCloneInit) { return true; } virtual BaseObject* GetVirtualObjects(BaseObject* op, const HierarchyHelp* hh); static NodeData* Alloc() { return NewObjClear(OptimizeObject); } }; BaseObject* OptimizeObject::GetVirtualObjects(BaseObject* op, const HierarchyHelp* hh) { // Declare our object and document. PolygonObject* obj = nullptr; BaseDocument* temp = nullptr; // Scope handlers should be at the top of a scope. iferr_scope_handler { DiagnosticOutput("@: @", MAXON_FUNCTIONNAME, err); if (obj) PolygonObject::Free(obj); if (temp) BaseDocument::Free(temp); return BaseObject::Alloc(Onull); }; // Create the polygon object and check for failures along the way. You could of course 'optimize' // these out, but then your plugin will crash when things go south (machine runs out of memory // for example). obj = PolygonObject::Alloc(8, 2); if (!obj) iferr_throw(maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION, "Could not allocate polygon object."_s)); if (!obj->ResizeObject(8, 2)) iferr_throw(maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION, "Could not resize polygon object."_s)); CPolygon* const polygons = obj->GetPolygonW(); Vector* const points = obj->GetPointW(); if (!polygons || !points) iferr_throw(maxon::UnexpectedError( MAXON_SOURCE_LOCATION, "Could not access polygon data."_s)); polygons[0].a = 0; polygons[0].b = 1; polygons[0].c = 2; polygons[0].d = 3; polygons[1].a = 4; polygons[1].b = 5; polygons[1].c = 6; polygons[1].d = 7; points[0] = Vector(0, 0, 0); points[1] = Vector(100, 0, 0); points[2] = Vector(100, 100, 0); points[3] = Vector(0, 100, 0); points[4] = Vector(0, 0, 0); points[5] = Vector(-100, 0, 0); points[6] = Vector(-100, 100, 0); points[7] = Vector(0, 100, 0); // Allocate the dummy document and insert the object. temp = BaseDocument::Alloc(); if (!temp) iferr_throw(maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION, "Could not allocate dummy document."_s)); temp->InsertObject(obj, nullptr, nullptr); // Run 'Optimize' on these inputs. ModelingCommandData mcdOptimize; mcdOptimize.doc = temp; mcdOptimize.op = obj; if (!SendModelingCommand(MCOMMAND_OPTIMIZE, mcdOptimize)) iferr_throw(maxon::UnexpectedError( MAXON_SOURCE_LOCATION, "Failed to run 'Optimize' command."_s)); // I am seeing this just now, but running Explode Segments makes zero sense for polygons for me, as this // is a spline tool. Am I overlooking here something? ModelingCommandData mcdExplodeSegments; mcdExplodeSegments.doc = temp; mcdExplodeSegments.op = obj; if (!SendModelingCommand(MCOMMAND_EXPLODESEGMENTS, mcdExplodeSegments)) iferr_throw(maxon::UnexpectedError( MAXON_SOURCE_LOCATION, "Failed to run 'Explode Segments' command."_s)); // Remove the object and free the document, as everything went fine. obj->Remove(); BaseDocument::Free(temp); return obj; } // Be sure to use a unique ID obtained from www.plugincafe.com static const Int32 g_pid_optimize_object = 1061894; Bool RegisterOptimizeObject() { return RegisterObjectPlugin( g_pid_optimize_object, "Optimize Object"_s, OBJECT_GENERATOR, OptimizeObject::Alloc, "ooptimizeobject"_s, nullptr, 0); }
ooptimizeobject.res
CONTAINER Ooptimizeobject { NAME Ooptimizeobject; INCLUDE Obase; GROUP ID_OBJECTPROPERTIES { } }
ooptimizeobject.h
#ifndef OOPTIMIZEOBJECT_H__ #define OOPTIMIZEOBJECT_H__ enum { }; #endif // OOPTIMIZEOBJECT_H__
ooptimizeobject.str
STRINGTABLE Ooptimizeobject { Ooptimizeobject "Optimize Object"; }
-
Hello again, thanks for the response.
@ferdinand said in SendModelingCommand causing Memory Leak:
// I am seeing this just now, but running Explode Segments makes zero sense for polygons for me, as this
// is a spline tool. Am I overlooking here something?Oops, I actually that that would explode the mesh islands, like the Explode Mesh Islands node for Neutron. I got distracted by the memory leaks before testing further. So at the moment I expect it wouldn't be needed or doing anything.
With the files you put up, I rebuilt from scratch and I'm still getting the same memory leaks as in my first post.
I'm uploading my project here, built from all your files, to hopefully provide more information.
-
Hey @d_schmidt,
Thank you for the updated information. Could you please fill in an issue report in the form as described below in Writing an Issue Description ? Please also provide the exact version number (XXXX.Y.Z - build numbers are not required) of the SDK you are building for and the Cinema 4D App you are debugging against.
Cheers,
Ferdinand
PS: I have taken this from another context ...
Writing an Issue Description
An issue description should take the following general form.
Short description (mandatory) [Image](optional) Reproduce (mandatory) * Step 1 * ... * Step N Result (mandatory) * Result 1 * ... * Result N Versions (optional) * [OK/NOK] Version 1 * ... * [OK/NOK] Version N
Our cube object example could have this description:
The Cube Object generates pyramid-like geometry when the Segments.X parameter of the Cube object is set to the value 42. Reproduce: 1. Open Cinema 4D in the Model layout. 2. Add the Cube object from the object palette. 3. Set the *Segments.X* parameter of the Cube object to 42. Result: 1. The Cube object resembles a pyramid object. 2. Changing the *Segments.X* parameter has no effect anymore. Versions: NOK 2023.9.1 OK 2023.2
Important points are:
- Do not write essays in the problem description. Developers tend to have limited time and patience, the more on point your problem description is, the better. In complex cases you can follow up the short description with a detailed description, but most of your work should go into sufficiently describing the problem in one sentence.
- Rather provide precise reproduction steps. Bugs often occur in a very specific context and things you might consider irrelevant are not. In this case, the precise context is the Model layout and creating the object from the object palette rather than from the menu. Your efforts in precision should go into this category.
- Observe Results. Bugs often have more than one effect, try to observe and describe as many side effects as possible. In this case, not only the geometry output is bugged, but also the triggering parameter once the bug has been triggered.
- Include Scenes. Include an example scene when possible and sensible.
-
I hope this helps!
Upon adding Optimize Object to the scene and immediately closing Cinema causes a series of memory leaks.
Reproduce:
- Open Cinema 4D.
- Add an Optimize Object.
- Close Cinema 4D.
Result:
- There are resulting memory leaks.
Versions:
NOK 2024.0.2 -
Hey @d_schmidt,
Thank you for the update. So, you build with and debug against
2024.0.2
? I will have a look next week, but as a little warning, my answer could end up being: 'we cannot support outdated minor versions'.Let me explain!
I have built against the 2024.0.0 SDK and debugged with 2024.1.0 RC. I started Cinema 4D with a debugger attached, instantiated an instance of the plugin, it successfully builds its cache, and then I shut down Cinema 4D. I had no memory leaks reported. Find my code below.
As you can see, when I answered above, I built against the
2024.0.0 RC
SDK (so that I would build a plugin which would be compatible with all versions of Cinema 4D 2024) but debugged against the latest (public) release2024.1.0 RC
, so that I would benefit from all public bug fixes. When there is a bug in2024.0.X
which causes feature Y to leak and there is already a2024.1.Z
release which fixes that, we cannot do anything for you, we cannot 'rerelease'2024.0.X
.You should always build against the first SDK of a major release so that your plugin is fully compatible with all versions of this release* (unless we publish an API fix in a later minor release which you require for your plugin). But you should always debug against the latest build.
Cheers,
Ferdinand[*] When you build against
2024.0.2
, users who are still running a prior version, e.g.,2024.0.0
, might not be able to run your plugin. The SDK is always only upwards-compatible: A2024.0
plugin runs in2024.1
but not the other way around. -
Hey @d_schmidt,
I just saw the xlib in your project, and it dawned on me that you are on MacOS/XCode. I had tested under Win/VS.
Cheers,
Ferdinand -
I've done a test compile on PC, in 2024 and R20. In 2024 the memory leaks exist as shown, but in R20 on PC they don't.
-
Hey @d_schmidt,
The project files you sent me clearly had been compiled on MacOS, all the Xcode build fragments are still there and so are the MacOS plugin binaries.
That aside, since you said that you are compiling on PC, I tried there again. I had to provide a missing
projectdefintion.txt
in your solution and provide the missing frameworks, I chose again the2024.0.0
frameworks. I also again debugged against2024.1.0
.I also had to fix the
main.cpp
as waiting for the resources being loaded had been removed onC4DPL_INIT_SYS
being emitted. What then had the effect that the resources of the plugin were not being found. Other than that, I still had no memory leaks.If you want any further help, you should try to explain more precisely what you are doing: OS, hardware, with which SDK version are you building, with which Cinema 4D are you debugging, what is your VS/Xcode version, are you compiling for debug or release, any customizations, etc. An ongoing problem is also that I must fix/invent things before I can compile and run your code - which is not ideal in such cases.
Cheers,
FerdinandFixed
main.cpp
:#include "main.h" // must be included when removing the other includes from the SDK #include "c4d_resource.h" Bool PluginStart() { if (!RegisterOptimizeObject()) return true; return true; } void PluginEnd(){} Bool PluginMessage(Int32 id, void* data) { switch (id) { case C4DPL_INIT_SYS: // The following two lines are required for a plugin to function properly. if (!g_resource.Init()) return false; return true; case C4DMSG_PRIORITY: return true; case C4DPL_EDITIMAGE: return false; } return false; }
My VS output console dump. This is from before I fixed your
main.cpp
, and even there I had no leaks:// Boot Sequence Messages [...] // I instantiated an ooptimizeobject, these errors are caused by the butchered main.cpp, it does not wait for the resources being loaded. Symbol resource error: Couldn't open file. (file:///C:/Program Files/Maxon/2024.1.0/resource/modules/c4d_base/description/ooptimizeobject.h) [iofilehandler_impl.cpp(427)] Cause: Errno #2: No such file or directory [iofilehandler_impl.cpp(427)] Following string resource does not exist:...\2024.1.0\resource\modules\c4d_base\strings_en-US\description\ooptimizeobject.str [...] // Shutdown Sequence Messages 15:01:06 DEBUG: PreviewScheduler: Flush/Clear Context 15:01:06 DEBUG: PreviewScheduler: End 15:01:06 DEBUG: Context: Locked:Highest 15:01:06 DEBUG: Context: Unlocked:Highest 15:01:06 DEBUG: PreviewScheduler: Flush completed The thread 0x4014 has exited with code 0 (0x0). 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\motiontracker\lpsolve55_64.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\d3d10core.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\d3d10.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_substance\libs\win64\substance_d3d10pc_blend.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_substance\libs\win64\substance_d3d11pc_blend.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_substance\libs\win64\substance_sse2_blend.dll' 15:01:07 DEBUG: PostFX: Shut down The thread 0x2d74 has exited with code 0 (0x0). The thread 0x5d98 has exited with code 0 (0x0). The thread 0x3fcc has exited with code 0 (0x0). 15:01:07 DEBUG: Shutdown GPU Devices... The thread 0x4694 has exited with code 0 (0x0). The thread 0x7b4 has exited with code 0 (0x0). The thread 0x1f60 has exited with code 0 (0x0). The thread 0x2f38 has exited with code 0 (0x0). The thread 0x4c9c has exited with code 0 (0x0). The thread 0x40f4 has exited with code 0 (0x0). The thread 0x145c has exited with code 0 (0x0). The thread 0x672c has exited with code 0 (0x0). The thread 0x305c has exited with code 0 (0x0). The thread 0x53d0 has exited with code 0 (0x0). The thread 0x3420 has exited with code 0 (0x0). The thread 0x46c0 has exited with code 0 (0x0). The thread 0x16a8 has exited with code 0 (0x0). The thread 0x4968 has exited with code 0 (0x0). The thread 0x1f7c has exited with code 0 (0x0). The thread 0x4d48 has exited with code 0 (0x0). The thread 0x2eec has exited with code 0 (0x0). The thread 0x4d14 has exited with code 0 (0x0). The thread 0x4808 has exited with code 0 (0x0). The thread 0x34ac has exited with code 0 (0x0). The thread 0x3cb0 has exited with code 0 (0x0). The thread 0x75f0 has exited with code 0 (0x0). The thread 0x331c has exited with code 0 (0x0). The thread 0x2fcc has exited with code 0 (0x0). The thread 0x3130 has exited with code 0 (0x0). The thread 0x6dbc has exited with code 0 (0x0). 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\Redshift\res\libs\win64\nvrtc-builtins64_112.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\Redshift\res\libs\win64\embree4redshift.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\Redshift\res\libs\win64\redshift-core-cpu-vc140.dll' 15:01:07 DEBUG: Devices shut down ok 15:01:07 DEBUG: Shutdown Rendering Sub-Systems... The thread 0x3714 has exited with code 0 (0x0). The thread 0x4174 has exited with code 0 (0x0). The thread 0x4be4 has exited with code 0 (0x0). The thread 0x5974 has exited with code 0 (0x0). The thread 0x398c has exited with code 0 (0x0). The thread 0xa30 has exited with code 0 (0x0). The thread 0x4d40 has exited with code 0 (0x0). The thread 0xc48 has exited with code 0 (0x0). The thread 0x241c has exited with code 0 (0x0). The thread 0x35cc has exited with code 0 (0x0). 15:01:08 DEBUG: Finished Shutting down Rendering Sub-Systems The thread 0x5810 has exited with code 0 (0x0). The thread 0x1e94 has exited with code 0 (0x0). The thread 0x6d20 has exited with code 0 (0x0). The thread 0x5cc4 has exited with code 0 (0x0). The thread 0x70d4 has exited with code 0 (0x0). The thread 0x3d94 has exited with code 0 (0x0). The thread 0x1a50 has exited with code 0 (0x0). The thread 0x8a8 has exited with code 0 (0x0). The thread 0x6d84 has exited with code 0 (0x0). The thread 0x5df4 has exited with code 0 (0x0). The thread 0x1998 has exited with code 0 (0x0). The thread 0x6e8 has exited with code 0 (0x0). The thread 0x3f10 has exited with code 0 (0x0). The thread 0x4e94 has exited with code 0 (0x0). The thread 0x5274 has exited with code 0 (0x0). The thread 0x4438 has exited with code 0 (0x0). The thread 0x6c0c has exited with code 0 (0x0). The thread 0x56e4 has exited with code 0 (0x0). The thread 0x14d8 has exited with code 0 (0x0). The thread 0x4588 has exited with code 0 (0x0). The thread 0x6edc has exited with code 0 (0x0). The thread 0x2fa0 has exited with code 0 (0x0). The thread 0x2a08 has exited with code 0 (0x0). The thread 0x1054 has exited with code 0 (0x0). The thread 0x72e8 has exited with code 0 (0x0). The thread 0xfc4 has exited with code 0 (0x0). The thread 0x7404 has exited with code 0 (0x0). The thread 0x6984 has exited with code 0 (0x0). The thread 0x1e80 has exited with code 0 (0x0). The thread 0x61bc has exited with code 0 (0x0). The thread 0x6164 has exited with code 0 (0x0). The thread 0x504 has exited with code 0 (0x0). The thread 0x6ef8 has exited with code 0 (0x0). The thread 0x569c has exited with code 0 (0x0). 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\dciman32.dll' The thread 0x3924 has exited with code 1 (0x1). The thread 0x5040 has exited with code 0 (0x0). The thread 0x6a8c has exited with code 0 (0x0). The thread 0x2558 has exited with code 0 (0x0). The thread 0x4c30 has exited with code 0 (0x0). The thread 0x65ac has exited with code 0 (0x0). The thread 0x5ae8 has exited with code 0 (0x0). The thread 0x66b8 has exited with code 0 (0x0). The thread 0x673c has exited with code 0 (0x0). The thread 0x4334 has exited with code 0 (0x0). The thread 0xe34 has exited with code 0 (0x0). The thread 0x196c has exited with code 0 (0x0). The thread 0x6124 has exited with code 0 (0x0). The thread 0x509c has exited with code 0 (0x0). The thread 0x50ec has exited with code 0 (0x0). The thread 0x2b28 has exited with code 0 (0x0). The thread 0x3afc has exited with code 0 (0x0). The thread 0x6b04 has exited with code 0 (0x0). The thread 0x742c has exited with code 0 (0x0). The thread 0x42b4 has exited with code 0 (0x0). The thread 0x1868 has exited with code 0 (0x0). The thread 0x50b4 has exited with code 0 (0x0). The thread 0x6680 has exited with code 0 (0x0). The thread 0x5950 has exited with code 0 (0x0). 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\DriverStore\FileRepository\nvgbdsi.inf_amd64_3658df21346d526f\nvwgf2umx.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\DriverStore\FileRepository\nvgbdsi.inf_amd64_3658df21346d526f\nvldumdx.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\drawport_directx.module\libs\win64\dxil.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\drawport_directx.module\libs\win64\dxcompiler.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\xpressocore.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\volumes\libs\win64\openvdb.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\volumes.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\uvviewport.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\tool_system_hybrid.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\thinking_particles.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\teamrender.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\sla.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\sky.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\sketch.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\shader.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\sculpt.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\redshift.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\python.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\pbd_simulations.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\motiontracker.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\motioncam.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\mograph.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\mocca.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_usd.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_substance\libs\win64\substance_linker.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_substance.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_skp\libs\win64\SketchUpCommonPreferences.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_skp\libs\win64\SketchUpAPI.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_skp.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_obj.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_goz.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_gltf.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_forger.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_fbx.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_compositing.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_collada15.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_collada14.xdl64' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\wsock32.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_cadexchange\libs\win64\kernel_io.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_cadexchange.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_alembic.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\interop_moves.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\interop_misc.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\interop_forger.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\interop_bpexchange.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\hair.xdl64' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\vcruntime140d.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\ucrtbased.dll' 'Cinema 4D.exe' (Win32): Unloaded 'E:\plugins\2024.0\sdk2\plugins\example.main\example.main.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\dynamics.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\clothilde.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\ca.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_xtensions.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_viewport_render.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_simulation.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\c4d_objects\libs\win64\ChSolver.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\c4d_objects\libs\win64\xremeshlib2.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_objects.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_nodes.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_nodeeditor.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_manager.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_bitmapfilter.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_assetbrowser.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\bugslife_client.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\archigrass.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\analytics.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\advanced_render.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\unittests_common.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\tool_system.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\tool_scene_abstraction.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\svg.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\shadernodes.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\retargetbase.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\render.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\reflection.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\pythonvm.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\presenter_nodes.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\presenter_nodegraph.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\presenter_base.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\post.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\physx.module\libs\win64\PhysX_64.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\physx.module\libs\win64\PhysXCommon_64.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\physx.module\libs\win64\PhysXCooking_64.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\physx.module\libs\win64\PhysXFoundation_64.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\physx.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\parallelprogram.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\opensubdiv.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\nodes_corenodes.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\nodes.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\neutron.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\network.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\modeling_mesh.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\modeling_geometry_abstraction.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\modeling_geom.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\misc.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\math.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\magicbulletlooks.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_usd.module\libs\win64\tbb.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\io_usd.module\libs\win64\usd_ms.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\io_usd.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\image_openexr.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\image_ocio_gpu.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\image_gpu.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\image_exif.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\gui_gluon.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\embree_classic.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\embree.module\libs\win64\embree3maxon.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\embree.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\drawport_selector.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\drawport_general.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\drawport_directx.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\drawport.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\denoiser.module\libs\win64\tbb12.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\modules\denoiser.module\libs\win64\OpenImageDenoise.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\denoiser.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\dbgcore.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\crashhandler.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\corenodes.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\command.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_viewport_nodegraph.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\c4d_base.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\asset.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\image_ocio.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\msacm32.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\avifil32.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\image.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\comdlg32.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\credui.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\d2d1.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\msimg32.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.22621.1778_none_57fe2016ce1542ec\GdiPlus.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\msvfw32.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\DWrite.dll' 'Cinema 4D.exe' (Win32): Unloaded 'C:\Windows\System32\usp10.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\corelibs\gui.module.xdl64' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\libs\win64\libmmd.dll' 'Cinema 4D.exe' (Win32): Unloaded '...\2024.1.0\resource\libs\win64\svml_dispmd.dll' The thread 0x75f4 has exited with code 0 (0x0). The thread 0x2370 has exited with code 0 (0x0). The thread 0x49b4 has exited with code 0 (0x0). The thread 0x2ba0 has exited with code 0 (0x0). The thread 0x6824 has exited with code 0 (0x0). The thread 0x2330 has exited with code 0 (0x0). The thread 0x3fbc has exited with code 0 (0x0). The thread 0x9c8 has exited with code 0 (0x0). The thread 0x7378 has exited with code 0 (0x0). The thread 0x7740 has exited with code 0 (0x0). The thread 0x5a8c has exited with code 0 (0x0). The thread 0x7334 has exited with code 0 (0x0). The thread 0x54e0 has exited with code 0 (0x0). The thread 0x4a08 has exited with code 0 (0x0). The thread 0x1dd8 has exited with code 0 (0x0). The thread 0x778c has exited with code 0 (0x0). The thread 0x24e8 has exited with code 0 (0x0). The thread 0x1720 has exited with code 0 (0x0). The thread 0x1990 has exited with code 0 (0x0). The thread 0x6d30 has exited with code 0 (0x0). The thread 0x670 has exited with code 0 (0x0). The thread 0x774c has exited with code 0 (0x0). The thread 0x6008 has exited with code 0 (0x0). The thread 0x4094 has exited with code 0 (0x0). The thread 0x60b0 has exited with code 0 (0x0). The thread 0x5124 has exited with code 0 (0x0). The thread 0xae8 has exited with code 0 (0x0). The thread 0x5484 has exited with code 0 (0x0). The thread 0x4ef0 has exited with code 0 (0x0). The thread 0x594c has exited with code 0 (0x0). The thread 0x578c has exited with code 0 (0x0). The thread 0x1fb4 has exited with code 0 (0x0). The thread 0x3058 has exited with code 0 (0x0). The thread 0x3a9c has exited with code 0 (0x0). The thread 0x5ee4 has exited with code 0 (0x0). The thread 0x6c04 has exited with code 0 (0x0). The thread 0x66bc has exited with code 0 (0x0). The thread 0x6234 has exited with code 0 (0x0). The thread 0xf84 has exited with code 0 (0x0). The thread 0x30e4 has exited with code 0 (0x0). The thread 0x766c has exited with code 0 (0x0). The thread 0x484 has exited with code 0 (0x0). The thread 0x38f8 has exited with code 0 (0x0). The thread 0x4068 has exited with code 0 (0x0). The thread 0x3628 has exited with code 0 (0x0). The thread 0x3010 has exited with code 0 (0x0). The thread 0x5eb8 has exited with code 0 (0x0). The thread 0x5df0 has exited with code 0 (0x0). The thread 0x2c44 has exited with code 0 (0x0). The thread 0x39dc has exited with code 0 (0x0). The thread 0x3edc has exited with code 0 (0x0). The thread 0x35f8 has exited with code 0 (0x0). The thread 0x4278 has exited with code 0 (0x0). The thread 0x3bb8 has exited with code 0 (0x0). The thread 0x5018 has exited with code 0 (0x0). The thread 0x1ecc has exited with code 0 (0x0). The thread 0x6450 has exited with code 0 (0x0). The thread 0x6214 has exited with code 0 (0x0). The thread 0x1ea0 has exited with code 0 (0x0). The thread 0x243c has exited with code 0 (0x0). The thread 0x2dd4 has exited with code 0 (0x0). The thread 0x2d68 has exited with code 0 (0x0). The thread 0x6aa4 has exited with code 0 (0x0). The thread 0x49c8 has exited with code 0 (0x0). The thread 0x3e84 has exited with code 0 (0x0). The thread 0x3348 has exited with code 0 (0x0). The thread 0x247c has exited with code 0 (0x0). The thread 0x2430 has exited with code 0 (0x0). The thread 0x2f90 has exited with code 0 (0x0). The thread 0x10c has exited with code 0 (0x0). The thread 0x6d14 has exited with code 0 (0x0). The thread 0x1ee4 has exited with code 0 (0x0). The program '[28656] Cinema 4D.exe' has exited with code 0 (0x0).