There is a history to this mess, probably found by searching the archives. Roughly, Greg tried to clean up the code resulting in the 4.3.0 situation. That immediately broke something I had developed years back that assumed that invalids would 'pass through' without side-effects in certain cases. So Greg and/or David fixed and/or rolled-back the patch to make 4.3.2. In my case, I was creating a bit mask and AND/ing or OR/ing it with another to create a joint 'invalids' array. But the 4.2.0 patch was disabling my nice new array before it exited the Compute or the Replace (I forget which), so I could never get my resultant field back the way it had worked prior (and now works again).
<x-tad-bigger>____________________________
Chris Pelkie
Vice President (607) 257-8335
Conceptual Reality Presentations, Inc.
30 West Meadow Drive
Ithaca, NY 14850</x-tad-bigger>

On Feb 25, 2005, at 9:55, Marco Morandini wrote:

I've spent the last two days spotting the reason
of a different behaviour between 4.2.0 and
4.3.3.

The visual program that trigger the difference
adds an invalid positions component to a field;
in the same field, some (but not all) of the positions values
are referenced by a connection.

The problem is that DXInvalidateUnreferencedPositions is called
by DXChangedComponentValues, thus invalidating some
valid positions. This is not what happens in 4.2.0,
where DXInvalidateUnreferencedPositions is not called.

Having understood the reason of the different behaviour
it is easy to "fix" the visual program removing
the connection, adding the invalid position and then
re-adding the connection component.
However, It's not clear to me why
DXInvalidateUnreferencedPositions should be called.

Is this patch safe?


Index: helper.c
===================================================================
RCS file: /src/master/dx/src/exec/libdx/helper.c,v
retrieving revision 1.8
diff -u -r1.8 helper.c
--- helper.c 18 Aug 2003 19:37:28 -0000 1.8
+++ helper.c 25 Feb 2005 14:41:27 -0000
@@ -504,7 +504,6 @@
if (DXGetComponentValue(f, "connections"))
{
DXInvalidateConnections((Object)f);
- DXInvalidateUnreferencedPositions((Object)f);
DXChangedComponentValues(f, "connections");
}
DXChangedComponentValues(f, "positions");

Thanks,

Marco Morandini

Reply via email to