I've restructured the logic to avoid the need for status_mutex_. On receipt of an 'event' (new listener, new position, new reverse geocode, shutting down), the callback functions no longer perform any logic. They instead simply set a flag and signal an event to the run loop. The run loop thread performs all of the logic, and this avoids the need for a lock on the status variables.
This approach does, however, introduce the need for other mutexes to protect data which is now accessed in both the callback functions and the run loop. Overall, the structure isn't much simpler, but it does avoid the danger of deadlock between the position and status mutexes. New snapshot uploaded.
