diff --git a/apps/nsqd/main.go b/apps/nsqd/main.go index 3e22d74a2..c9860ac6e 100644 --- a/apps/nsqd/main.go +++ b/apps/nsqd/main.go @@ -70,6 +70,10 @@ func (p *program) Start() error { if err != nil { logFatal("failed to instantiate nsqd - %s", err) } + if p.nsqd != nil{ + ctx, ctxCancel := p.nsqd.GetCtx() + nsqd.SetCtx(ctx, ctxCancel) + } p.nsqd = nsqd err = p.nsqd.LoadMetadata() @@ -114,6 +118,11 @@ func (p *program) Stop() error { // Context returns a context that will be canceled when nsqd initiates the shutdown func (p *program) Context() context.Context { + if p.nsqd == nil{ + p.nsqd = &nsqd.NSQD{} + ctx, ctxCancel := context.WithCancel(context.Background()) + p.nsqd.SetCtx(ctx, ctxCancel) + } return p.nsqd.Context() } diff --git a/nsqd/nsqd.go b/nsqd/nsqd.go index d918b7856..aa56825f6 100644 --- a/nsqd/nsqd.go +++ b/nsqd/nsqd.go @@ -175,6 +175,15 @@ func New(opts *Options) (*NSQD, error) { return n, nil } +func (n *NSQD) SetCtx(ctx context.Context, ctxCancel context.CancelFunc){ + n.ctx = ctx + n.ctxCancel = ctxCancel +} + +func (n *NSQD) GetCtx() (ctx context.Context, ctxCancel context.CancelFunc){ + return n.ctx, n.ctxCancel +} + func (n *NSQD) getOpts() *Options { return n.opts.Load().(*Options) }