On Aug 7, 2012, at 5:41 PM, Alex Rønne Petersen <a...@lycus.org> wrote:
> On 07-08-2012 21:38, Sean Kelly wrote: >> On Aug 7, 2012, at 9:36 AM, David <d...@dav1d.de> wrote: >> >>> I have a threaded connection: >>> ... >>> Since this is a daemon thread, I'd expect it to stop/terminate when the >>> main thread stops. This is not the case (it keeps running), is this a known >>> bug and how can I workaround this? >> >> Daemon threads will keep running until the process terminates. Forcibly >> halting them any earlier risks leaving mutexes they hold in a locked state, >> etc, which could break shutdown and hang the app. Typically, you'll want to >> have a shared module dtor communicate to any daemon threads that it's time >> for them to halt, and block until a response is received if you want to >> ensure a clean shutdown. >> > > Huh? From thread.di: > > /** > * Gets the daemon status for this thread. While the runtime will wait for > * all normal threads to complete before tearing down the process, daemon > * threads are effectively ignored and thus will not prevent the process > * from terminating. In effect, daemon threads will be terminated > * automatically by the OS when the process exits. > * > * Returns: > * true if this is a daemon thread. > */ > final @property bool isDaemon(); > > I'm confused... shouldn't daemon threads die when the main thread dies (which > effectively exits the process)? Yes, but remember that the main thread doesn't die the moment the app's main() function returns. There's some runtime shutdown code that's run first. See druntime/rt/dmain2.d.