diff --git a/Cargo.lock b/Cargo.lock index 1b41e48ba82..974b7c40cc5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -814,9 +814,9 @@ checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -1004,9 +1004,9 @@ dependencies = [ [[package]] name = "dialoguer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3c796f3b0b408d9fd581611b47fa850821fcb84aa640b83a3c1a5be2d691f2" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" dependencies = [ "console", "shell-words", @@ -1216,13 +1216,13 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1278,14 +1278,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall 0.2.16", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1468,9 +1468,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2029,14 +2029,14 @@ checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-terminal" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", "rustix", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -3450,16 +3450,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.7" +version = "0.37.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -3767,9 +3767,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.19" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82e6c8c047aa50a7328632d067bcae6ef38772a79e28daf32f735e0e4f3dd10" +checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" dependencies = [ "indexmap", "itoa", @@ -4693,9 +4693,9 @@ dependencies = [ [[package]] name = "unsafe-libyaml" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2024452afd3874bf539695e04af6732ba06517424dbf958fdb16a01f3bef6c" +checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" [[package]] name = "untrusted" @@ -4996,7 +4996,7 @@ dependencies = [ "serde", "serde_cbor", "serde_json", - "serde_yaml 0.9.19", + "serde_yaml 0.9.21", "thiserror", "toml", ] @@ -5707,7 +5707,7 @@ dependencies = [ "serde", "serde_cbor", "serde_json", - "serde_yaml 0.9.19", + "serde_yaml 0.9.21", "thiserror", "toml", ] diff --git a/lib/api/src/externals/memory.rs b/lib/api/src/externals/memory.rs index 4a52234eeac..2571207ccaf 100644 --- a/lib/api/src/externals/memory.rs +++ b/lib/api/src/externals/memory.rs @@ -143,6 +143,21 @@ impl Memory { } /// Attempts to clone this memory (if its clonable) in a new store + pub fn clone_in_store( + &self, + store: &impl AsStoreRef, + new_store: &mut impl AsStoreMut, + ) -> Option { + if !self.ty(store).shared { + // We should only be able to duplicate in a new store if the memory is shared + return None; + } + self.0 + .try_clone(&store) + .map(|new_memory| Self::new_from_existing(new_store, new_memory)) + } + + /// Attempts to duplicate this memory (if its clonable) in a new store pub fn duplicate_in_store( &self, store: &impl AsStoreRef, diff --git a/lib/wasi-web/Cargo.lock b/lib/wasi-web/Cargo.lock index ae60ce6c925..c8883863184 100644 --- a/lib/wasi-web/Cargo.lock +++ b/lib/wasi-web/Cargo.lock @@ -63,19 +63,19 @@ checksum = "70033777eb8b5124a81a1889416543dddef2de240019b674c81285a2635a7e1e" [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -193,7 +193,7 @@ checksum = "e31225543cb46f81a7e224762764f4a6a0f097b1db0b175f69e8065efaa42de5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -271,9 +271,9 @@ checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "corosensei" @@ -290,9 +290,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -327,9 +327,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -337,24 +337,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.13", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -377,7 +377,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -388,7 +388,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -399,7 +399,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -470,7 +470,7 @@ checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -491,7 +491,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -520,9 +520,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -535,9 +535,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -545,15 +545,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -562,38 +562,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -609,9 +609,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -619,9 +619,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "js-sys", @@ -707,16 +707,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows", ] [[package]] @@ -753,9 +753,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -812,9 +812,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.140" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "link-cplusplus" @@ -953,7 +953,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1031,7 +1031,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1071,7 +1071,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -1094,9 +1094,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -1118,7 +1118,7 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1134,9 +1134,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5308e8208729c3e1504a6cfad0d5daacc4614c9a2e65d1ea312a34b5cb00fe84" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -1193,9 +1193,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -1213,9 +1213,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "region" @@ -1240,9 +1240,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.40" +version = "0.7.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30f1d45d9aa61cbc8cd1eb87705470892289bb2d01943e7803b873a57404dc3" +checksum = "21499ed91807f07ae081880aabb2ccc0235e9d88011867d984525e9a4c3cfa3e" dependencies = [ "bytecheck", "hashbrown", @@ -1255,20 +1255,20 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.40" +version = "0.7.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff26ed6c7c4dfc2aa9480b86a60e3c7233543a270a680e10758a507c5a4ce476" +checksum = "ac1c672430eb41556291981f45ca900a0239ad007242d1cb4b4167af842db666" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" [[package]] name = "rustc_version" @@ -1350,9 +1350,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.155" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] @@ -1380,20 +1380,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.155" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -1492,9 +1492,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] @@ -1538,7 +1538,7 @@ dependencies = [ "quote", "serde", "serde_derive", - "syn", + "syn 1.0.109", ] [[package]] @@ -1554,7 +1554,7 @@ dependencies = [ "serde_derive", "serde_json", "sha1", - "syn", + "syn 1.0.109", ] [[package]] @@ -1574,6 +1574,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "target-lexicon" version = "0.12.6" @@ -1610,22 +1621,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -1673,7 +1684,7 @@ dependencies = [ "proc-macro2", "quote", "standback", - "syn", + "syn 1.0.109", ] [[package]] @@ -1693,13 +1704,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", - "memchr", "pin-project-lite", "tokio-macros", "windows-sys 0.45.0", @@ -1707,13 +1717,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -1724,9 +1734,9 @@ checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.19.5" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7082a95d48029677a28f181e5f6422d0c8339ad8396a39d3f33d62a90c1f6c30" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" dependencies = [ "indexmap", "toml_datetime", @@ -1754,7 +1764,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1859,9 +1869,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -2014,7 +2024,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdeeb5c1170246de8425a3e123e7ef260dc05ba2b522a1d369fe2315376efea4" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", "wai-bindgen-gen-core", "wai-bindgen-gen-rust-wasm", ] @@ -2039,7 +2049,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b3488ed88d4dd0e3bf85bad4e27dac6cb31aae5d122a5dda2424803c8dc863a" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", "wai-bindgen-gen-core", "wai-bindgen-gen-wasmer", ] @@ -2065,12 +2075,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -2103,7 +2112,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -2127,7 +2136,7 @@ checksum = "c5020cfa87c7cecefef118055d44e3c1fc122c7ec25701d528ee458a0b45f38f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2160,7 +2169,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2257,7 +2266,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2507,6 +2516,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + [[package]] name = "windows-sys" version = "0.33.0" @@ -2526,29 +2544,50 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" @@ -2558,9 +2597,15 @@ checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" @@ -2570,9 +2615,15 @@ checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" @@ -2582,9 +2633,15 @@ checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" @@ -2594,15 +2651,27 @@ checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" @@ -2612,15 +2681,21 @@ checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" dependencies = [ "memchr", ] diff --git a/lib/wasi-web/src/pool.rs b/lib/wasi-web/src/pool.rs index 55344789788..5542bc15203 100644 --- a/lib/wasi-web/src/pool.rs +++ b/lib/wasi-web/src/pool.rs @@ -29,14 +29,14 @@ use wasm_bindgen::{prelude::*, JsCast}; use wasm_bindgen_futures::JsFuture; use wasmer_wasix::{ runtime::SpawnType, - wasmer::{vm::VMMemory, MemoryType, Module, Store, WASM_MAX_PAGES}, + wasmer::{AsJs, Memory, MemoryType, Module, Store, WASM_MAX_PAGES}, VirtualTaskManager, WasiThreadError, }; use web_sys::{DedicatedWorkerGlobalScope, WorkerOptions, WorkerType}; use xterm_js_rs::Terminal; use super::{common::*, interval::*}; -use crate::runtime::{build_memory_internal, WebTaskManager}; +use crate::runtime::WebTaskManager; pub type BoxRun<'a> = Box; @@ -54,7 +54,7 @@ enum WasmRunType { #[derivative(Debug)] struct WasmRunCommand { #[derivative(Debug = "ignore")] - run: Box) + Send + 'static>, + run: Box) + Send + 'static>, ty: WasmRunType, store: Store, module_bytes: Bytes, @@ -269,7 +269,7 @@ impl WebThreadPool { pub fn spawn_wasm( &self, - run: impl FnOnce(Store, Module, Option) + Send + 'static, + run: impl FnOnce(Store, Module, Option) + Send + 'static, wasm_store: Store, wasm_module: Module, spawn_type: SpawnType, @@ -279,9 +279,8 @@ impl WebThreadPool { SpawnType::Create => WasmRunType::Create, SpawnType::CreateWithType(mem) => WasmRunType::CreateWithMemory(mem.ty), SpawnType::NewThread(memory) => { - let (mem, ty) = memory.clone().into(); - wasm_memory = mem; - WasmRunType::Existing(ty) + wasm_memory = memory.as_jsvalue(&wasm_store); + WasmRunType::Existing(memory.ty(&wasm_store)) } }; @@ -566,7 +565,7 @@ pub fn wasm_entry_point(ctx_ptr: u32, wasm_module: JsValue, wasm_memory: JsValue let run_callback = (*ctx).cmd.run; // Compile the web assembly module - let wasm_store = ctx.cmd.store; + let mut wasm_store = ctx.cmd.store; let wasm_module = match wasm_module.dyn_into::() { Ok(a) => a, Err(err) => { @@ -583,17 +582,18 @@ pub fn wasm_entry_point(ctx_ptr: u32, wasm_module: JsValue, wasm_memory: JsValue let wasm_memory = match ctx.memory { WasmRunMemory::WithoutMemory => None, WasmRunMemory::WithMemory(wasm_memory_type) => { - let wasm_memory = match wasm_memory.dyn_into::() { - Ok(a) => a, - Err(err) => { - error!( - "Failed to receive memory for module - {}", - err.as_string().unwrap_or_else(|| format!("{:?}", err)) - ); - return; - } - }; - Some(VMMemory::new(wasm_memory, wasm_memory_type)) + let wasm_memory = + match Memory::from_jsvalue(&mut wasm_store, &wasm_memory_type, &wasm_memory) { + Ok(a) => a, + Err(err) => { + // error!( + // "Failed to receive memory for module - {}", + // err.as_string().unwrap_or_else(|| format!("{:?}", err)) + // ); + return; + } + }; + Some(wasm_memory) } }; @@ -610,7 +610,7 @@ pub fn wasm_entry_point(ctx_ptr: u32, wasm_module: JsValue, wasm_memory: JsValue pub fn worker_schedule_task(task_ptr: u32, wasm_module: JsValue, mut wasm_memory: JsValue) { // Grab the task that passes us the rust variables let task = task_ptr as *mut WasmRunCommand; - let task = unsafe { Box::from_raw(task) }; + let mut task = unsafe { Box::from_raw(task) }; let mut opts = WorkerOptions::new(); opts.type_(WorkerType::Module); @@ -647,13 +647,14 @@ pub fn worker_schedule_task(task_ptr: u32, wasm_module: JsValue, mut wasm_memory } if wasm_memory.is_null() { - wasm_memory = match build_memory_internal(ty) { - Ok(m) => JsValue::from(m), + let memory = match Memory::new(&mut task.store, ty.clone()) { + Ok(a) => a, Err(err) => { error!("Failed to create WASM memory - {}", err); return; } }; + wasm_memory = memory.as_jsvalue(&task.store); } let ctx = WasmRunContext { diff --git a/lib/wasi-web/src/runtime.rs b/lib/wasi-web/src/runtime.rs index 26530b1b0a8..df70f2a763b 100644 --- a/lib/wasi-web/src/runtime.rs +++ b/lib/wasi-web/src/runtime.rs @@ -20,7 +20,7 @@ use wasmer_wasix::{ http::{DynHttpClient, HttpRequest, HttpResponse}, os::{TtyBridge, TtyOptions}, runtime::SpawnType, - wasmer::{vm::VMMemory, MemoryType, Module, Store}, + wasmer::{Memory, MemoryType, Module, Store, StoreMut}, VirtualFile, VirtualNetworking, VirtualTaskManager, WasiRuntime, WasiThreadError, WasiTtyState, }; use web_sys::WebGl2RenderingContext; @@ -100,39 +100,29 @@ impl<'g> Drop for WebRuntimeGuard<'g> { fn drop(&mut self) {} } -pub fn build_memory_internal(ty: MemoryType) -> Result { - let descriptor = js_sys::Object::new(); - js_sys::Reflect::set(&descriptor, &"initial".into(), &ty.minimum.0.into()).unwrap(); - //let min = 100u32.max(ty.minimum.0); - //js_sys::Reflect::set(&descriptor, &"initial".into(), &min.into()).unwrap(); - if let Some(max) = ty.maximum { - js_sys::Reflect::set(&descriptor, &"maximum".into(), &max.0.into()).unwrap(); - } - js_sys::Reflect::set(&descriptor, &"shared".into(), &ty.shared.into()).unwrap(); - - match js_sys::WebAssembly::Memory::new(&descriptor) { - Ok(a) => Ok(VMMemory::new(a, ty)), - Err(err) => { - error!( - "WebAssembly failed to create the memory - {}", - err.as_string().unwrap_or_else(|| format!("{:?}", err)) - ); - return Err(WasiThreadError::MemoryCreateFailed); - } - } -} - #[async_trait::async_trait] #[allow(unused_variables)] impl VirtualTaskManager for WebTaskManager { /// Build a new Webassembly memory. /// /// May return `None` if the memory can just be auto-constructed. - fn build_memory(&self, spawn_type: SpawnType) -> Result, WasiThreadError> { + fn build_memory( + &self, + mut store: &mut StoreMut, + spawn_type: SpawnType, + ) -> Result, WasiThreadError> { match spawn_type { - SpawnType::Create => Ok(None), - SpawnType::CreateWithType(mem) => build_memory_internal(mem.ty).map(|a| Some(a)), + SpawnType::CreateWithType(mut mem) => { + mem.ty.shared = true; + Memory::new(&mut store, mem.ty) + .map_err(|err| { + tracing::error!("could not create memory: {err}"); + WasiThreadError::MemoryCreateFailed + }) + .map(Some) + } SpawnType::NewThread(mem) => Ok(Some(mem)), + SpawnType::Create => Ok(None), } } @@ -191,7 +181,7 @@ impl VirtualTaskManager for WebTaskManager { /// It is ok for this task to block execution and any async futures within its scope fn task_wasm( &self, - task: Box) + Send + 'static>, + task: Box) + Send + 'static>, store: Store, module: Module, spawn_type: SpawnType, diff --git a/lib/wasi/src/bin_factory/exec.rs b/lib/wasi/src/bin_factory/exec.rs index 02c12f58c91..62a4becdacd 100644 --- a/lib/wasi/src/bin_factory/exec.rs +++ b/lib/wasi/src/bin_factory/exec.rs @@ -80,15 +80,7 @@ pub fn spawn_exec_module( // Determine if we are going to create memory and import it or just rely on self creation of memory let memory_spawn = match shared_memory { - Some(ty) => { - #[cfg(feature = "sys")] - let style = store.engine().tunables().memory_style(&ty); - SpawnType::CreateWithType(SpawnedMemory { - ty, - #[cfg(feature = "sys")] - style, - }) - } + Some(ty) => SpawnType::CreateWithType(SpawnedMemory { ty }), None => SpawnType::Create, }; @@ -97,7 +89,7 @@ pub fn spawn_exec_module( let tasks_outer = tasks.clone(); let task = { - move |mut store, module, memory| { + move |mut store, module, memory: Option| { // Create the WasiFunctionEnv let mut wasi_env = env; wasi_env.runtime = runtime; @@ -109,9 +101,8 @@ pub fn spawn_exec_module( let (mut import_object, init) = import_object_for_all_wasi_versions(&module, &mut store, &wasi_env.env); let imported_memory = if let Some(memory) = memory { - let imported_memory = Memory::new_from_existing(&mut store, memory); - import_object.define("env", "memory", imported_memory.clone()); - Some(imported_memory) + import_object.define("env", "memory", memory.clone()); + Some(memory) } else { None }; diff --git a/lib/wasi/src/runtime/task_manager/mod.rs b/lib/wasi/src/runtime/task_manager/mod.rs index d11d7efae12..7116d27d55e 100644 --- a/lib/wasi/src/runtime/task_manager/mod.rs +++ b/lib/wasi/src/runtime/task_manager/mod.rs @@ -6,27 +6,20 @@ use std::{pin::Pin, time::Duration}; use ::tokio::runtime::Handle; use futures::Future; -use wasmer::vm::VMMemory; -use wasmer::{MemoryType, Module, Store}; - -#[cfg(feature = "sys")] -use wasmer_types::MemoryStyle; +use wasmer::{Memory, MemoryType, Module, Store, StoreMut}; use crate::os::task::thread::WasiThreadError; #[derive(Debug)] pub struct SpawnedMemory { pub ty: MemoryType, - // TODO: don't put behind a feature (Option?) - #[cfg(feature = "sys")] - pub style: MemoryStyle, } #[derive(Debug)] pub enum SpawnType { Create, CreateWithType(SpawnedMemory), - NewThread(VMMemory), + NewThread(Memory), } /// An implementation of task management @@ -36,7 +29,11 @@ pub trait VirtualTaskManager: std::fmt::Debug + Send + Sync + 'static { /// Build a new Webassembly memory. /// /// May return `None` if the memory can just be auto-constructed. - fn build_memory(&self, spawn_type: SpawnType) -> Result, WasiThreadError>; + fn build_memory( + &self, + store: &mut StoreMut, + spawn_type: SpawnType, + ) -> Result, WasiThreadError>; /// Invokes whenever a WASM thread goes idle. In some runtimes (like singlethreaded /// execution environments) they will need to do asynchronous work whenever the main @@ -64,7 +61,7 @@ pub trait VirtualTaskManager: std::fmt::Debug + Send + Sync + 'static { /// It is ok for this task to block execution and any async futures within its scope fn task_wasm( &self, - task: Box) + Send + 'static>, + task: Box) + Send + 'static>, store: Store, module: Module, spawn_type: SpawnType, diff --git a/lib/wasi/src/runtime/task_manager/thread.rs b/lib/wasi/src/runtime/task_manager/thread.rs index 3dd38e041d2..b3dccb62804 100644 --- a/lib/wasi/src/runtime/task_manager/thread.rs +++ b/lib/wasi/src/runtime/task_manager/thread.rs @@ -3,7 +3,7 @@ use std::pin::Pin; use futures::Future; #[cfg(feature = "sys-thread")] use tokio::runtime::{Builder, Runtime}; -use wasmer::{vm::VMMemory, Module, Store}; +use wasmer::{Module, Store}; use crate::{WasiCallingId, WasiThreadError}; @@ -79,7 +79,7 @@ impl VirtualTaskManager for ThreadTaskManager { /// It is ok for this task to block execution and any async futures within its scope fn task_wasm( &self, - task: Box) + Send + 'static>, + task: Box) + Send + 'static>, store: Store, module: Module, spawn_type: SpawnType, @@ -152,22 +152,18 @@ impl VirtualTaskManager for ThreadTaskManager { /// See [`VirtualTaskManager::enter`]. fn task_wasm( &self, - task: Box) + Send + 'static>, + task: Box) + Send + 'static>, store: Store, module: Module, spawn_type: SpawnType, ) -> Result<(), WasiThreadError> { - use wasmer::vm::VMSharedMemory; - - let memory: Option = match spawn_type { - SpawnType::CreateWithType(mem) => Some( - VMSharedMemory::new(&mem.ty, &mem.style) - .map_err(|err| { - tracing::error!("failed to create memory - {}", err); - }) - .unwrap() - .into(), - ), + let vm_memory: Option = match spawn_type { + SpawnType::CreateWithType(mut mem) => { + mem.shared = true; + Some(Memory::new(&mut store, mem).map_err(|err| { + tracing::error!("failed to create memory - {}", err); + }).unwrap()) + }, SpawnType::NewThread(mem) => Some(mem), SpawnType::Create => None, }; diff --git a/lib/wasi/src/runtime/task_manager/tokio.rs b/lib/wasi/src/runtime/task_manager/tokio.rs index 7db235e042c..ccac18757c1 100644 --- a/lib/wasi/src/runtime/task_manager/tokio.rs +++ b/lib/wasi/src/runtime/task_manager/tokio.rs @@ -6,10 +6,7 @@ use std::{ use futures::Future; use tokio::runtime::Handle; -use wasmer::{ - vm::{VMMemory, VMSharedMemory}, - Module, Store, -}; +use wasmer::{AsStoreMut, Memory, Module, Store, StoreMut}; use crate::os::task::thread::WasiThreadError; @@ -81,14 +78,21 @@ impl<'g> Drop for TokioRuntimeGuard<'g> { #[async_trait::async_trait] impl VirtualTaskManager for TokioTaskManager { - fn build_memory(&self, spawn_type: SpawnType) -> Result, WasiThreadError> { + fn build_memory( + &self, + mut store: &mut StoreMut, + spawn_type: SpawnType, + ) -> Result, WasiThreadError> { match spawn_type { - SpawnType::CreateWithType(mem) => VMSharedMemory::new(&mem.ty, &mem.style) - .map_err(|err| { - tracing::error!("could not create memory: {err}"); - WasiThreadError::MemoryCreateFailed - }) - .map(|m| Some(m.into())), + SpawnType::CreateWithType(mut mem) => { + mem.ty.shared = true; + Memory::new(&mut store, mem.ty) + .map_err(|err| { + tracing::error!("could not create memory: {err}"); + WasiThreadError::MemoryCreateFailed + }) + .map(Some) + } SpawnType::NewThread(mem) => Ok(Some(mem)), SpawnType::Create => Ok(None), } @@ -133,12 +137,12 @@ impl VirtualTaskManager for TokioTaskManager { /// See [`VirtualTaskManager::enter`]. fn task_wasm( &self, - task: Box) + Send + 'static>, - store: Store, + task: Box) + Send + 'static>, + mut store: Store, module: Module, spawn_type: SpawnType, ) -> Result<(), WasiThreadError> { - let memory = self.build_memory(spawn_type)?; + let memory = self.build_memory(&mut store.as_store_mut(), spawn_type)?; self.0.spawn_blocking(move || { // Invoke the callback task(store, module, memory); diff --git a/lib/wasi/src/state/env.rs b/lib/wasi/src/state/env.rs index d2d6687998b..908bf6a7189 100644 --- a/lib/wasi/src/state/env.rs +++ b/lib/wasi/src/state/env.rs @@ -442,28 +442,19 @@ impl WasiEnv { t } else { match shared_memory { - Some(ty) => { - #[cfg(feature = "sys")] - let style = store.engine().tunables().memory_style(&ty); - SpawnType::CreateWithType(SpawnedMemory { - ty, - #[cfg(feature = "sys")] - style, - }) - } + Some(ty) => SpawnType::CreateWithType(SpawnedMemory { ty }), None => SpawnType::Create, } }; - let memory = tasks.build_memory(spawn_type)?; + let memory = tasks.build_memory(&mut store, spawn_type)?; // Let's instantiate the module with the imports. let (mut import_object, instance_init_callback) = import_object_for_all_wasi_versions(&module, &mut store, &func_env.env); let imported_memory = if let Some(memory) = memory { - let imported_memory = Memory::new_from_existing(&mut store, memory); - import_object.define("env", "memory", imported_memory.clone()); - Some(imported_memory) + import_object.define("env", "memory", memory.clone()); + Some(memory) } else { None }; diff --git a/lib/wasi/src/syscalls/wasix/proc_fork.rs b/lib/wasi/src/syscalls/wasix/proc_fork.rs index c2ada15a106..5f97fc837c8 100644 --- a/lib/wasi/src/syscalls/wasix/proc_fork.rs +++ b/lib/wasi/src/syscalls/wasix/proc_fork.rs @@ -1,7 +1,6 @@ use super::*; use crate::{os::task::OwnedTaskStatus, syscalls::*}; - -use wasmer::vm::VMMemory; +use wasmer::Memory; /// ### `proc_fork()` /// Forks the current process into a new subprocess. If the function @@ -121,26 +120,19 @@ pub fn proc_fork( .unwrap(); let store_data = Bytes::from(store_data); + let mut fork_store = ctx.data().runtime.new_store(); + // Fork the memory and copy the module (compiled code) - let env = ctx.data(); - let fork_memory: VMMemory = match env - .memory() - .try_clone(&ctx) - .ok_or_else(|| MemoryError::Generic("the memory could not be cloned".to_string())) - .and_then(|mut memory| memory.duplicate()) - { - Ok(memory) => memory.into(), - Err(err) => { - warn!( - %err - ); + let (env, mut store) = ctx.data_and_store_mut(); + let fork_memory: Memory = match env.memory().duplicate_in_store(&store, &mut fork_store) { + Some(memory) => memory, + None => { + warn!("Can't duplicate memory in new store"); return OnCalledAction::Trap(Box::new(WasiError::Exit(Errno::Memviolation.into()))); } }; let fork_module = env.inner().instance.module().clone(); - let mut fork_store = ctx.data().runtime.new_store(); - // Now we use the environment and memory references let runtime = child_env.runtime.clone(); let tasks = child_env.tasks().clone(); @@ -159,7 +151,7 @@ pub fn proc_fork( let module = fork_module; let spawn_type = SpawnType::NewThread(fork_memory); - let task = move |mut store, module, memory| { + let task = move |mut store, module, memory: Option| { // Create the WasiFunctionEnv let pid = child_env.pid(); let tid = child_env.tid(); @@ -171,7 +163,6 @@ pub fn proc_fork( let (mut import_object, init) = import_object_for_all_wasi_versions(&module, &mut store, &ctx.env); let memory = if let Some(memory) = memory { - let memory = Memory::new_from_existing(&mut store, memory); import_object.define("env", "memory", memory.clone()); memory } else { diff --git a/lib/wasi/src/syscalls/wasix/thread_spawn.rs b/lib/wasi/src/syscalls/wasix/thread_spawn.rs index 37f9b005768..4133d5a4ac5 100644 --- a/lib/wasi/src/syscalls/wasix/thread_spawn.rs +++ b/lib/wasi/src/syscalls/wasix/thread_spawn.rs @@ -1,7 +1,7 @@ use super::*; use crate::syscalls::*; -use wasmer::vm::VMMemory; +use wasmer::Memory; use wasmer_wasix_types::wasi::ThreadStart; /// ### `thread_spawn()` @@ -56,13 +56,6 @@ pub fn thread_spawn( let thread_id: Tid = thread_handle.id().into(); Span::current().record("tid", thread_id); - // We need a copy of the process memory and a packaged store in order to - // launch threads and reactors - let thread_memory = wasi_try!(ctx.data().memory().try_clone(&ctx).ok_or_else(|| { - error!("failed - the memory could not be cloned"); - Errno::Notcapable - })); - let mut store = ctx.data().runtime.new_store(); // This function takes in memory and a store and creates a context that @@ -71,11 +64,9 @@ pub fn thread_spawn( let state = env.state.clone(); let wasi_env = env.duplicate(); let thread = thread_handle.as_thread(); - move |mut store: Store, module: Module, memory: VMMemory| { + move |mut store: Store, module: Module, memory: Memory| { // We need to reconstruct some things let module = module; - let memory = Memory::new_from_existing(&mut store, memory); - // Build the context object and import the memory let mut ctx = WasiFunctionEnv::new(&mut store, wasi_env.duplicate()); { @@ -109,6 +100,17 @@ pub fn thread_spawn( } }; + // We need a copy of the process memory and a packaged store in order to + // launch threads and reactors + let thread_memory = wasi_try!(ctx + .data() + .memory() + .clone_in_store(&ctx, &mut store) + .ok_or_else(|| { + error!("failed - the memory could not be cloned"); + Errno::Notcapable + })); + // This function calls into the module let start_ptr_offset = start_ptr.offset(); let call_module = move |ctx: &WasiFunctionEnv, store: &mut Store| { @@ -157,7 +159,7 @@ pub fn thread_spawn( // calls into the process let mut execute_module = { let state = env.state.clone(); - move |store: &mut Option, module: Module, memory: &mut Option| { + move |store: &mut Option, module: Module, memory: &mut Option| { // We capture the thread handle here, it is used to notify // anyone that is interested when this thread has terminated let _captured_handle = Box::new(&mut thread_handle); @@ -227,7 +229,6 @@ pub fn thread_spawn( warn!("thread failed - the program does not export a `wasi_thread_start` function"); return Errno::Notcapable; } - let spawn_type = crate::runtime::SpawnType::NewThread(thread_memory); // Now spawn a thread