hi,
most probably I am overlooking something, but if not, there seem to be two easy ways:
1. counting 'outlet_' calls being executed, and handling the 'set' message only if the counter is 0;
2. calling clock_delay(..., 0) in a 'set' method, and performing the un/binding in a separate event.
One other thing -- if Pd/receive is to be compatible with max/receive, then it is only the object *without an argument* to get its inlet, and handle the 'set' message. So, anyway, there would be *no overhead* in case of the objects with an argument (all that are in use now).
A sketch showing an easy way 2. is in the attachment.
Krzysztof
Miller Puckette wrote: ...
I don't think it's enough simply to insist that "set" messages come through the inlet; there could still be people traversing either the new or the old symbol somewhere up the stack.
I think the only solution would be somehow to detect reentrancy and refuse to bind or unbind something to a symbol reentrantly. I just can't think of a really efficient way to do this...