- //@ the check will always succeed. However, this function would still typecheck with an immutable borrow of `self` (since we are
- //@ relying on the interior mutability of `RefCell`). Under this condition, it could happen that a callback
- //@ will in turn trigger another round of callbacks, so that `call` would indirectly call itself.
- //@ This is called reentrancy. It would imply that we borrow the closure a second time, and
- //@ panic at run-time. I hope this also makes it clear that there's absolutely no hope of Rust
- //@ performing these checks statically, at compile-time: It would have to detect reentrancy!
+ //@ the check will always succeed, as is actually entirely useless. However, this is not actually true. Several different `CallbacksMut` could share
+ //@ a callback (as they were created with `clone`), and calling one callback here could trigger calling
+ //@ all callbacks of the other `CallbacksMut`, which would end up calling the initial callback again. This issue of functions accidentally recursively calling
+ //@ themselves is called *reentrancy*, and it can lead to subtle bugs. Here, it would mean that the closure runs twice, each time thinking it has a
+ //@ unique, mutable reference to its environment - so it may end up dereferencing a dangling pointer. Ouch! Lucky enough,
+ //@ Rust detects this at run-time and panics once we try to borrow the same environment again. I hope this also makes it
+ //@ clear that there's absolutely no hope of Rust performing these checks statically, at compile-time: It would have to detect reentrancy!