http://d.puremagic.com/issues/show_bug.cgi?id=5317
--- Comment #5 from Andrej Mitrovic <andrej.mitrov...@gmail.com> 2011-06-04 12:33:33 PDT --- This might not be directly relevant to this bug report, but I thought I'd share the story anyway. I currently have this in one of my projects: An extern(C) callback is passed to a device driver. The user-code then calls driver.start(), and the driver starts a new high-priority/ISR routine which calls the callback at some predetermined rate. Now, in my main() function I have this (pseudocode): driver.start() scope(exit) driver.stop(); // Calling this before app exit on started drivers is crucial while (engineRunning) { } // shared bool of the engine state That works well for the user thread, if an exception is thrown in the user thread scope exit will be ran and the driver is released. But if in the callback thread an exception is thrown and is uncaught it will shut down my application but it won't call driver.stop(), because it's in a different thread which main doesn't directly know about. I've had this happen to me several times with ASIO Audio drivers. Most of the times, the app will quit but appear frozen in taskbar and the device driver won't get released even if I do a cold-reboot of my soundcard (it's external with its own power source). It then takes a few minutes or a pc-reboot for the driver to actually get released. But worse things have happened, I've had several BSODs as well. It wasn't obvious to me what was going on until I've realized that driver.stop() never gets called. So now my current workaround is to wrap any code in the callback with a try..catch: extern(C) callback(args..) { try { realCallback(args); } catch (Throwable) { engineRunning = false; } } If an exception is thrown the app can call driver.stop() (since the user thread keeps checking the state ofr the shared engineRunning boolean), and then the app can quit safely. Quitting forcefully on any errors might not be the best thing to do. But maybe my use-case is a special one, and this doesn't happen that frequently outside of using device drivers or other types of external resources. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------