Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.2 KiB
73 lines
2.2 KiB
// Copyright 2019 The Gitea Authors. All rights reserved. |
|
// Use of this source code is governed by a MIT-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package graceful |
|
|
|
import ( |
|
"context" |
|
"time" |
|
) |
|
|
|
// ChannelContext is a context that wraps a channel and error as a context |
|
type ChannelContext struct { |
|
done <-chan struct{} |
|
err error |
|
} |
|
|
|
// NewChannelContext creates a ChannelContext from a channel and error |
|
func NewChannelContext(done <-chan struct{}, err error) *ChannelContext { |
|
return &ChannelContext{ |
|
done: done, |
|
err: err, |
|
} |
|
} |
|
|
|
// Deadline returns the time when work done on behalf of this context |
|
// should be canceled. There is no Deadline for a ChannelContext |
|
func (ctx *ChannelContext) Deadline() (deadline time.Time, ok bool) { |
|
return |
|
} |
|
|
|
// Done returns the channel provided at the creation of this context. |
|
// When closed, work done on behalf of this context should be canceled. |
|
func (ctx *ChannelContext) Done() <-chan struct{} { |
|
return ctx.done |
|
} |
|
|
|
// Err returns nil, if Done is not closed. If Done is closed, |
|
// Err returns the error provided at the creation of this context |
|
func (ctx *ChannelContext) Err() error { |
|
select { |
|
case <-ctx.done: |
|
return ctx.err |
|
default: |
|
return nil |
|
} |
|
} |
|
|
|
// Value returns nil for all calls as no values are or can be associated with this context |
|
func (ctx *ChannelContext) Value(key interface{}) interface{} { |
|
return nil |
|
} |
|
|
|
// ShutdownContext returns a context.Context that is Done at shutdown |
|
// Callers using this context should ensure that they are registered as a running server |
|
// in order that they are waited for. |
|
func (g *Manager) ShutdownContext() context.Context { |
|
return g.shutdownCtx |
|
} |
|
|
|
// HammerContext returns a context.Context that is Done at hammer |
|
// Callers using this context should ensure that they are registered as a running server |
|
// in order that they are waited for. |
|
func (g *Manager) HammerContext() context.Context { |
|
return g.hammerCtx |
|
} |
|
|
|
// TerminateContext returns a context.Context that is Done at terminate |
|
// Callers using this context should ensure that they are registered as a terminating server |
|
// in order that they are waited for. |
|
func (g *Manager) TerminateContext() context.Context { |
|
return g.terminateCtx |
|
}
|
|
|