mirror of
https://github.com/moby/moby.git
synced 2026-08-09 17:39:58 +00:00
ensureReaderClosed was designed to be usable regardless if a response was nil (error) or non-nil (success). Some code-paths were optimized to avoid using a defer (which used to have an overhead), but the overhead of defer is neglectable in current versions of Go, and some of these optimizations made the logic more complicated (and err-prone). This patch switches to use a defer for all places. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"github.com/moby/moby/api/types/container"
|
|
"github.com/moby/moby/api/types/versions"
|
|
)
|
|
|
|
// ContainerStop stops a container. In case the container fails to stop
|
|
// gracefully within a time frame specified by the timeout argument,
|
|
// it is forcefully terminated (killed).
|
|
//
|
|
// If the timeout is nil, the container's StopTimeout value is used, if set,
|
|
// otherwise the engine default. A negative timeout value can be specified,
|
|
// meaning no timeout, i.e. no forceful termination is performed.
|
|
func (cli *Client) ContainerStop(ctx context.Context, containerID string, options container.StopOptions) error {
|
|
containerID, err := trimID("container", containerID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
query := url.Values{}
|
|
if options.Timeout != nil {
|
|
query.Set("t", strconv.Itoa(*options.Timeout))
|
|
}
|
|
if options.Signal != "" {
|
|
// Make sure we negotiated (if the client is configured to do so),
|
|
// as code below contains API-version specific handling of options.
|
|
//
|
|
// Normally, version-negotiation (if enabled) would not happen until
|
|
// the API request is made.
|
|
if err := cli.checkVersion(ctx); err != nil {
|
|
return err
|
|
}
|
|
if versions.GreaterThanOrEqualTo(cli.version, "1.42") {
|
|
query.Set("signal", options.Signal)
|
|
}
|
|
}
|
|
resp, err := cli.post(ctx, "/containers/"+containerID+"/stop", query, nil, nil)
|
|
defer ensureReaderClosed(resp)
|
|
return err
|
|
}
|