I didn't look at the threading issue, but there is at least one part of that patch that looks wrong to me:
In joydev_enum_deviceW():
- if (id != 0)
- return FALSE;
+ if (id >= have_joydevs) {
+ return -1;
+ }
I think that should return FALSE rather than -1 (TRUE).
