Restores ModuleConfig.WithName to support cloned Wasm (#282)

PR #281 allowed repetitive use of the same module config to avoid
re-decoding the same wasm. However, it is possible that configuration is
renamed in separate goroutines. This makes caching safer by restoring
the `WithName` function deleted earlier. By using this, a configuration
and its cache state are cloned, and doing that is thread safe.

Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
Crypt Keeper
2022-02-23 17:30:29 +08:00
committed by GitHub
parent fc26fdd225
commit 782dad3e39
2 changed files with 23 additions and 2 deletions

View File

@@ -55,8 +55,12 @@ func TestDecodeModule(t *testing.T) {
again, _, err := decodeModule(config)
require.NoError(t, err)
require.Same(t, m, again)
// Ensure config that only changes the name doesn't have to re-decode the source.
cloned, _, err := decodeModule(config.WithName("wazero"))
require.NoError(t, err)
require.Same(t, m, cloned)
})
t.Run("changing source invalidates decode cache", func(t *testing.T) {
@@ -64,12 +68,19 @@ func TestDecodeModule(t *testing.T) {
m, _, err := decodeModule(config)
require.NoError(t, err)
clonedConfig := config.WithName("wazero")
// When the source is changed, the module needs to be decoded again
config.Source = wasm
again, _, err := decodeModule(config)
require.NoError(t, err)
require.Equal(t, m, again)
require.NotSame(t, m, again)
// Any copies of the config shouldn't be invalidated
cloned, _, err := decodeModule(clonedConfig)
require.NoError(t, err)
require.Same(t, m, cloned)
})
}