FIXED: [2019.30790 Win10] Replicator Crash Bug (or DAT Execute DAT bug)

Hello,

As an overview of what I’m doing:
I am taking a custom string parameter on a base component (ie “test1 test2 test3 test4”), splitting this by spaces " ", then appending these to a table. So I end up with a table of the space-delimited input.
I am then using this as the Template DAT table in a replicator in order to replicate a Touch In DAT TCP connection. The parameter will eventually describe remote addresses, however I dont think that is relevant to this bug.

These Touch In DATS are then monitored by a DAT Execute in order to copy the data from any connection that changes into a local copy (altho this isnt configured in my test project)
The idea being, I can easily configure multiple remote connections, and have the replicator set these up, then have a single table showing the latest data.

I have included a test project that is “ready to crash” as well as a crash report and the crash autosave.
To trigger the bug, open the “Replicator Crash Test” project, and remove “test4” from the vals parameter.
This will trigger the parexec1 DAT which will split the parameter and create the contents of table1 DAT, which feeds replicator. The replicator is then told to recreate all.

The datexec1 DAT Execute DAT is set up to watch all of the Touch Ins. The idea being that if any of them change, then it will copy that Touch In DAT to a table DAT. So perhaps it is this datexec1 that is causing the crash, with dynamically created operators appearing and disappearing.

Replicator Crash Test.zip (44.8 KB)

Win 10 Pro version 1903 Build 18362.476
TD Version 2019.30790
Let me know if hardware specs are relevant…

After writing that up, I bypassed the datexec1 DAT Execute operator, and it stopped crashing.

I’ve tried bypassing the datexec1 whilst replicating, then unbypassing it. I’ve tried unbypassing it using a run() script with 5 frames of delay.

I’ve tried building a string of the replicated TouchIn op’s names, then assigning that to the datexec “dats” parameter, instead of using a wildcard. I’ve done this whilst its bypassed, and with the delayed unbypassing.

Nothing prevented it from crashing.

I am now pretty sure this is a bug with the DAT Execute DAT.

EDIT:
Testing with just the replicator seems solid. Add in the DAT Execute DAT, and it starts crashing

EDIT:
Digging in further, I’m pretty sure this is only about removing operators.
I’ve tried adding a delay on the replicant.destroy() in the onRemoveReplicant() method, so the datexec1 has a chance to internally update its hooks/triggers/whatever, but its still crashing

So, I wrapped a TouchIn DAT and a DAT Execute DAT inside a base component.
The replicator is now replicating this, and it seems fine.
I’m guessing that DAT Execute DATs targeting replicated Table DATs doesnt work.

I guess I was just missing the paradigm/technique for this :slight_smile:

Can you try 33840? Looks like the crash has been fixed there. We’ve fixed a couple of replicator related crash recently. Thanks for your report.