diff --git a/runtime.go b/runtime.go index ba34a324..47895061 100644 --- a/runtime.go +++ b/runtime.go @@ -308,11 +308,6 @@ func (r *runtime) InstantiateModule( if code.closeWithModule { _ = code.Close(ctx) // don't overwrite the error } - if se, ok := err.(*sys.ExitError); ok { - if se.ExitCode() == 0 { // Don't err on success. - err = nil - } - } return } diff --git a/runtime_test.go b/runtime_test.go index 331d6026..a7158d8c 100644 --- a/runtime_test.go +++ b/runtime_test.go @@ -478,8 +478,9 @@ func TestRuntime_InstantiateModule_ExitError(t *testing.T) { expectedErr error }{ { - name: "start: exit code 0", - exitCode: 0, + name: "start: exit code 0", + exitCode: 0, + expectedErr: sys.NewExitError(0), }, { name: "start: exit code 2", @@ -531,11 +532,16 @@ func TestRuntime_InstantiateModule_ExitError(t *testing.T) { binary := binaryencoding.EncodeModule(mod) // Instantiate the module, which calls the start function. - _, err = r.InstantiateWithConfig(testCtx, binary, + m, err := r.InstantiateWithConfig(testCtx, binary, NewModuleConfig().WithName("call-exit")) // Ensure the exit error propagated and didn't wrap. require.Equal(t, tc.expectedErr, err) + + // Ensure calling close again doesn't break + if err == nil { + require.NoError(t, m.Close(testCtx)) + } }) } }