Okay... I believe the bug is gone this time. Cross your fingers...

I laid an implicit rule that after the controller input device is unregistered, it must be NULL'd out. This is what we use in the work handlers to determine whether its a valid input device. It's efficient and simple.

Well, it turns out in the destroy handler (which is called from the disconnect handler), I was unregistering the device and not killing the in urb. In this commit, all I did was NULL it out so its caught. Which brings me to my next point.

In the future, we should be able to completely remove the need for the mutex we currently use simply by good design. The current mutex isn't neccessarily slow, it's just that it complicates the code for absolutely no reason.

Also, I figured out that only the wheel device does this. If I connected two wireless controllers, the syncronization issue doesn't arise. Rather, the wheel sometimes doesn't even respond to the presence packet which I find odd. Simply turning the controller off and then on again fixes the problem. Perhaps I should send a second presence packet just in case.