From 464e6ff39952c7bd749e35ad1a0901d9805dd345 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Tue, 8 Dec 2020 10:39:19 +0000 Subject: [PATCH] use named return value and closure This is to correctly handle deferred Close() calls on writable files. --- x/auth/client/cli/tx_multisign.go | 16 +++++++++++----- x/auth/client/cli/tx_sign.go | 18 ++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index dd59226425d0..56e1e1b5c9d2 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -60,7 +60,7 @@ recommended to set such parameters manually. return cmd } -func makeMultiSignCmd() func(cmd *cobra.Command, args []string) error { +func makeMultiSignCmd() func(cmd *cobra.Command, args []string) (err error) { return func(cmd *cobra.Command, args []string) (err error) { clientCtx := client.GetClientContextFromCmd(cmd) clientCtx, err = client.ReadTxCommandFlags(clientCtx, cmd.Flags()) @@ -183,11 +183,17 @@ func makeMultiSignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return err } - if err = fp.Close(); err != nil { - return err - } - return clientCtx.PrintBytes(json) + defer func() { + err2 := fp.Close() + if err == nil { + err = err2 + } + }() + + err = clientCtx.PrintBytes(json) + + return } } diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index fcf0f4a72638..2f3f87c8e61b 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -209,10 +209,10 @@ func preSignCmd(cmd *cobra.Command, _ []string) { } func makeSignCmd() func(cmd *cobra.Command, args []string) error { - return func(cmd *cobra.Command, args []string) error { + return func(cmd *cobra.Command, args []string) (err error) { clientCtx := client.GetClientContextFromCmd(cmd) f := cmd.Flags() - clientCtx, err := client.ReadTxCommandFlags(clientCtx, f) + clientCtx, err = client.ReadTxCommandFlags(clientCtx, f) if err != nil { return err } @@ -295,11 +295,17 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return err } - if err = fp.Close(); err != nil { - return err - } - return clientCtx.PrintBytes(json) + defer func() { + err2 := fp.Close() + if err == nil { + err = err2 + } + }() + + err = clientCtx.PrintBytes(json) + + return } }