Well, like before I don't really like the idea of putting a lock in the generic implementation, when it's only needed because of one of its user. I think it would be good to have a separate thread safe one wrapping the unsafe one. The serial can still be implemented in the unsafe code, if we really need to return E_CHANGED_STATE.