Bryce McKinlay writes:
> Andrew Haley wrote:
> > Once the class was initialized, you'd need to rewrite the
> > instructions in the trampolines to point to the static methods
> > that don't do class initialization. While all this was going on,
> > there still would be threads jumping to these trampolines.
> > However, these trampolines are not themseolves protected by
> > locks, and there's no guarantee that you can rewrite the
> > instructions atomically. So, you'd run the risk of a partially
> > rewritten instruction being executed. If you can rewrite the
> > trampolines atomically then I think you might be OK.
>
> Why rewrite the trampolines? Once a class is initialized, its
> atable entries are updated to point to the real function. Swapping
> function pointers in the atable is atomic.
Ah, OK, you're fixing up the caller's pointers rather than anything in
the target. I can see that would work, but there are potentially many
atable entries in many classes pointing to a static method.