This is a fascinating case of every individual operation working perfectly and the collective doing something horribly wrong.
I have no idea why this wasn't encountered as an issue years ago. Here's the situation:
A class Alpha has two dynamic dispatch VIs, E1.vi and E2.vi. RunMe.vi is called by Alpha:E1.vi and calls Alpha:E2.vi.
When you run a VI, any other VIs that use that VI as a subVI are broken -- you can't use a top-level VI as a subVI in LV. So when you hit the run arrow of RunMe.vi, we break Alpha:E1.vi. Because E1 is a dynamic dispatch member of the class, this breaks the entire class (because we can't set up the dispatch table correctly if one of the dynamic dispatch VIs is broken). That breaks Alpha:E2.vi. Because D2 is used as a subVI of RunMe, that breaks RunMe.vi. It leaves RunMe.vi in an impossible state -- running and broken, and LV gets confused about exactly what the VI's state is, and ends up crashing when you try to take that VI out of memory (at the close of the project).
At one level, this should be closed "Not A Bug" -- after all, each individual behavior was right. A VI running top level should break its callers. A broken dynamic dispatch VI should break the class. A broken subVI should break its callers. But put these all together in a single system and
BOOM, LV fall down and hurt itself.
I'll be digging into this one for a while.
In the meantime, as a workaround, don't run RunMe.vi directly. Instead, drop RunMe.vi as a subVI of an independent VI and run that.
[NOTE] I have edited this post to use E1 and E2 instead of D1 and D2 since colon+D turns into a happy face like this
😄 and I don't see any checkbox on the forum to turn off the conversions.
Message Edited by Aristos Queue on
11-19-2007 02:38 PM