From c23c942c2c00cd0cd357928e395d727820740851 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 25 Oct 2012 16:51:01 -0400 Subject: [PATCH] better bound thread --- Assistant.hs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Assistant.hs b/Assistant.hs index 77790b9c65..0fdda69974 100644 --- a/Assistant.hs +++ b/Assistant.hs @@ -216,19 +216,17 @@ startAssistant assistant daemonize webappwaiter = withThreadState $ \st -> do , assist $ transferScannerThread st dstatus scanremotes transferqueue , assist $ configMonitorThread st dstatus branchhandle commitchan #ifdef WITH_XMPP - , assist $ pushNotifierThread st dstatus pushnotifier + {- Bound thread, because TLS needs it. -} + , bound $ assist $ pushNotifierThread st dstatus pushnotifier #endif , watch $ watchThread st dstatus transferqueue changechan ] waitForTermination - watch a = (True, a) - assist a = (False, a) - {- Each named thread is started in a bound thread. - - (forkOS rather than forkIO). There are not too many, - - and this deals with libraries like gnuTLS that - - require only one thread access them. -} - startthread dstatus (watcher, t) - | watcher || assistant = void $ forkOS $ + watch a = (forkIO, True, a) + assist a = (forkIO, False, a) + bound (_, watcher, t) = (forkOS, watcher, t) + startthread dstatus (runner, watcher, t) + | watcher || assistant = void $ runner $ runNamedThread dstatus t | otherwise = noop