11-02-2023 08:30 AM
I checked my LV error log*. Running that example does indeed cause the DWarn:
DWarn 0x4F94E02B: DisposeObjHeap: conditions that caused CAR #279915 have appeared
E:\builds\2020patch\source\objheap\objheap.cpp(392) : DWarn 0x4F94E02B: DisposeObjHeap: conditions that caused CAR #279915 have appeared
minidump id: 1ab00ea3-e13d-456b-be17-beb396e9da85
$Id: //labview/branches/2020patch/dev/source/objheap/objheap.cpp#1 $
* C:\Users\User\AppData\Local\Temp\LabVIEW_64_20.0f1_User_cur.txt)
11-02-2023 08:37 AM
So it seems that it doesn't just flag a reference for deletion and wait until it's safe but actually kills it immidiatly? So, don't close VI refs if they're in use. 🙂
11-02-2023 09:10 AM
@Yamaeda wrote:
So it seems that it doesn't just flag a reference for deletion and wait until it's safe but actually kills it immidiatly?
Yes, you get the exact reference that is used in the panel, not a new reference to the VI in the subpanel.
Closing the reference apparently makes LV kill it, not sure why as the VI is still in memory.
@Yamaeda wrote:
So, don't close VI refs if they're in use. 🙂
Yes, but once the VI using InsertedVI stops, it will close the reference, and there's nothing you can do about it.
This happens here (no close):
Since larger applications that typically use subpanels also use dynamic VIs a lot, it's quite easy to have a clone call InsertedVI.
Then everything goes sour...
It's not just that your code doesn't do what's expected. You actually need to make the inserted VI and the VI with the subpanel leave memory before you can give it a new try... Both the main subpanel and the DUT are useless until closed and reloaded.
11-02-2023 10:44 AM
I believe the DWarn was fixed in LV 2021 SP1. Note that the documentation does mention that if you close the reference of the inserted VI, it will remain visible in the subpanel until the VI that owns the subpanel goes idle, and that a best practice is to call Remove VI if you don't want to see the VI in the subpanel anymore.
I verified that running your example no longer returns a DWarn in LV 2023 Q3. For reference, the Bug that was fixed in LV 2021 SP1 to address this issue was Bug 1631819.
11-02-2023 11:05 AM - edited 11-02-2023 11:10 AM
@Darren wrote:I verified that running your example no longer returns a DWarn in LV 2023 Q3. For reference, the Bug that was fixed in LV 2021 SP1 to address this issue was Bug 1631819.
I tried to generate a log to send it to R&D, but it won't reproduce anymore. There might be more to it.
EDIT: It did create a log DWarn eventually, maybe not until I closed the VI?
I'm looking into it because our application suddenly started crashing (LV20, 64 bit), and the log is filled with CAR #279915 references (2 crashes, one with exactly 80 DWarns, the other exactly 100 DWarns).
But I don't use InsertedVI at all.
The crashes are unattended (no user interaction for hours), and the only lead that's left is to examine the changes between the last stable version and the first unstable version.