Revert "Remove HLE_IPC_CreateVirtualFATFilesystem as it no longer takes 3 minutes to LLE like the comment says."
This reverts commit 5d47fd1dde3ccdc286e2248db9967c278d694f5a.
On OS X, openL2CAPChannelSync registers events on the current
thread's run loop, so Connect needs to be called on a thread that's
going to do CFRunLoopRun; this was causing all Wiimote input to be
ignored. Easiest way to do that is to use the Wiimote thread, and
have Read call CFRunLoopRun to block on events, bringing OS X's
Wiimote event loop in line with every other platform's. This also
means that the thread can't be stopped and recreated by Prepare,
so make Prepare notify it instead, which has the side effect of not
making the GUI block on Prepare. (It would be nice if the GUI also
did not block on searching for devices, because blocking the GUI
is gross, but for now...)
IOdarwin.mm was assuming that scanning was complete when the run loop
was stopped (which the scan callback does), but somebody else was
stopping the run loop first, causing the scan to be aborted. Wait until
the scan is actually complete.
Not only do debuggers catch the expected SIGSEGV by default, I'm not
sure there's a working way to configure either gdb or lldb not to. This
commit uses an OS X-specific mechanism to add an exception handler that
runs before the default one.
It isn't easily accessible with sigaction or Mach exceptions (well,
requires an additional system call in the latter), and isn't necessary.
(and get rid of the enum, because it's only used once, and the comments
are more expressive than enum names)
It tried to cast incoming pointers to native ones. The values are
required to be null anyway, so it doesn't really matter, but it fixes a
warning at least.
(This is currently pointless, as the code in question is not used on OS
X anyway, but I'd like to see that option come back. In any case, fixes
the warning)
MSVC insisted on using a copy assignment where a move was intended and
ought to be used. This would have been caught, because the class in
question inherits from NonCopyable, which declares a move assignment
operator, which is supposed to delete the implicitly declared copy
assignment operator, but of course MSVC didn't do that either, causing a
class that should have been safe to be unsafe.