Skip to content

Commit

Permalink
fix incorrect defer exit(err) statements (#93)
Browse files Browse the repository at this point in the history
When calling a function directly from a `defer` statement, like so:

```go
var err error
exit := someFuncReturningAFunctor()
defer exit(err)
```

The `exit` function is passed the `err` variable by value, which means
that the value of `err` will always be nil above.

In order to have the deferred `exit` function use the value of the `err`
variable *on exit of the function*, you need to wrap the `exit` call
inside a temporary function, like so:

```go
var err error
exit := someFuncReturningAFunctor()
defer func() {
        exit(err)
}()
```

See here for more information about this odd behaviour:

https://stackoverflow.com/questions/42703707/when-defer-func-evaluates-its-parameters

The alternative solution here was to change `exit`'s call signature to
accept a `*error` instead of an `error`, however we have code out there
in the controllers that would break if we changed `exit`'s function
signature.

By submitting this pull request, I confirm that my contribution is made
under the terms of the Apache 2.0 license.
  • Loading branch information
jaypipes committed Jun 15, 2022
1 parent 1163c8e commit 71e60cc
Show file tree
Hide file tree
Showing 34 changed files with 549 additions and 45 deletions.
17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/apis/meta/v1/object.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/cacheable_object.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/nested_object_decoder.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/nested_object_encoder.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/object.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/object_convertor.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/object_creater.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/object_defaulter.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/object_typer.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/object_versioner.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/schema/object_kind.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/apimachinery/pkg/runtime/unstructured_converter.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/controller-runtime/pkg/client/client.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/controller-runtime/pkg/client/object.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/controller-runtime/pkg/client/object_list.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion mocks/controller-runtime/pkg/client/reader.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 71e60cc

Please sign in to comment.