Fix a race condition.
When an operation that removes a component completes, it is possible for the component to be destroyed (if, for example, the operation's result does not properly hold shared-pointer references to keep it in memory until operation observers complete). Verify that components have not expired their weak pointer before derefencing our cached pointer to get the name.