The change listener thread spins, using ~6% CPU - magnitudes more than the entire rest of the app at idle. This comes from the implementation of the bus::BusReader::*recv* family of functions, which use adaptive spinning to check the state of the bus. Go fix it, future me!!