This means nothing. The value of the pointer doesn't magically become null if the player is free'd. This will potentially access an invalid memory location if the player has been free'd before the callback. This is one of the **many** cases you must think of the consequences and why you shouldn't aggressively force asynchronous SQL everywhere. It would have been a lot easier to just create the dispatcher first, and then slowly start adapting functions to it (perhaps start with some safe queries like INSERT's to death list and market history), because with all these changes you've made I doubt I will be able to confidently merge this PR anytime soon, it will require a lot of improvements and review.