improve thread termination handling
The reason the DirWatcher had to wait for program termination was because it used withINotify, so when it finished, its watcher threads were killed. But since I have two DirWatcher threads now, that was not good, and could perhaps explain the MVar problem I saw yesterday. In any case, fixed this part of the code by making the DirWatcher return a handle that can be used to stop it, and now the main Assistant thread is the only one calling waitForTermination.
This commit is contained in:
parent
40f357fdcf
commit
4888c5b042
4 changed files with 33 additions and 11 deletions
|
@ -73,6 +73,7 @@ import Assistant.Threads.Merger
|
|||
import Assistant.Threads.SanityChecker
|
||||
import qualified Utility.Daemon
|
||||
import Utility.LogFile
|
||||
import Utility.ThreadScheduler
|
||||
|
||||
import Control.Concurrent
|
||||
|
||||
|
@ -99,8 +100,8 @@ startDaemon assistant foreground
|
|||
_ <- forkIO $ mergeThread st
|
||||
_ <- forkIO $ daemonStatusThread st dstatus
|
||||
_ <- forkIO $ sanityCheckerThread st dstatus changechan
|
||||
-- Does not return.
|
||||
watchThread st dstatus changechan
|
||||
_ <- forkIO $ watchThread st dstatus changechan
|
||||
waitForTermination
|
||||
|
||||
stopDaemon :: Annex ()
|
||||
stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue