Commit afd497e1 authored by Konstantin Koroviev's avatar Konstantin Koroviev

Dirty hack to fix race conditions in the daemon

parent e0cf24bf
......@@ -267,6 +267,10 @@ func daemonFunc(req cmds.Request, res cmds.Response) {
gateway.ServeOption(),
corehttp.VersionOption(),
}
// our global interrupt handler can now try to stop the daemon
close(req.Context().ContextIsReadyToBeClosed)
if rootRedirect != nil {
opts = append(opts, rootRedirect)
}
......
......@@ -132,6 +132,14 @@ func main() {
os.Exit(1)
}
// our global interrupt handler may try to stop the daemon
// before the daemon is ready to be stopped; this dirty
// workaround is for the daemon only; other commands are always
// ready to be stopped
if invoc.cmd != daemonCmd {
close(invoc.req.Context().ContextIsReadyToBeClosed)
}
// ok, finally, run the command invocation.
output, err := invoc.Run(ctx)
if err != nil {
......@@ -473,6 +481,9 @@ func (i *cmdInvocation) setupInterruptHandler() {
sig := allInterruptSignals()
go func() {
// wait till the context is ready to be closed
<-ctx.ContextIsReadyToBeClosed
// first time, try to shut down.
// loop because we may be
......
......@@ -28,8 +28,9 @@ type Context struct {
config *config.Config
LoadConfig func(path string) (*config.Config, error)
node *core.IpfsNode
ConstructNode func() (*core.IpfsNode, error)
node *core.IpfsNode
ConstructNode func() (*core.IpfsNode, error)
ContextIsReadyToBeClosed chan bool
}
// GetConfig returns the config of the current Command exection
......@@ -287,7 +288,7 @@ func NewRequest(path []string, opts OptMap, args []string, file files.File, cmd
optDefs = make(map[string]Option)
}
ctx := Context{Context: context.TODO()}
ctx := Context{Context: context.TODO(), ContextIsReadyToBeClosed: make(chan bool)}
values := make(map[string]interface{})
req := &request{path, opts, args, file, cmd, ctx, optDefs, values, os.Stdin}
err := req.ConvertOptions()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment