diff --git a/Cargo.lock b/Cargo.lock index 7dd68ae..52f04d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] @@ -37,21 +37,20 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bbd92a9bd0e9c1298118ecf8a2f825e86b12c3ec9e411573e34aaf3a0c03cdd" +checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61" dependencies = [ - "easy-parallel", "event-listener", "futures-core", - "parking_lot 0.11.2", + "parking_lot", ] [[package]] name = "async-channel" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" dependencies = [ "concurrent-queue", "event-listener", @@ -74,10 +73,11 @@ dependencies = [ [[package]] name = "async-io" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07" +checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" dependencies = [ + "autocfg", "concurrent-queue", "futures-lite", "libc", @@ -130,9 +130,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", @@ -174,9 +174,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" [[package]] name = "cache-padded" @@ -225,9 +225,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] @@ -239,8 +239,9 @@ dependencies = [ "async-signals", "color-eyre", "futures-util", + "launch-pad", "libc", - "nix 0.24.2", + "nix 0.25.0", "scopeguard", "sendfd", "serde", @@ -285,12 +286,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "easy-parallel" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" - [[package]] name = "enumflags2" version = "0.7.5" @@ -314,9 +309,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "eyre" @@ -330,24 +325,24 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" [[package]] name = "futures-lite" @@ -366,9 +361,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" dependencies = [ "proc-macro2", "quote", @@ -377,21 +372,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ "futures-core", "futures-macro", @@ -451,9 +446,21 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" + +[[package]] +name = "launch-pad" +version = "0.1.0" +source = "git+https://github.com/pop-os/launch-pad#2815570c919c6ff7b7d06c2ae6dd57c9acdbb927" +dependencies = [ + "log", + "slotmap", + "thiserror", + "tokio", + "tokio-util", +] [[package]] name = "lazy_static" @@ -463,15 +470,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" dependencies = [ "autocfg", "scopeguard", @@ -512,9 +519,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" dependencies = [ "adler", ] @@ -546,10 +553,11 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.2" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" dependencies = [ + "autocfg", "bitflags", "cfg-if", "libc", @@ -576,9 +584,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" [[package]] name = "ordered-stream" @@ -592,9 +600,9 @@ dependencies = [ [[package]] name = "owo-colors" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "decf7381921fea4dcb2549c5667eda59b3ec297ab7e2b5fc33eac69d2e7da87b" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "parking" @@ -602,17 +610,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -620,21 +617,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -664,10 +647,11 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "polling" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" dependencies = [ + "autocfg", "cfg-if", "libc", "log", @@ -683,28 +667,29 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ + "once_cell", "thiserror", "toml", ] [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -732,18 +717,18 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -802,9 +787,9 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "scopeguard" @@ -824,18 +809,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.140" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.140" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2", "quote", @@ -844,9 +829,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "itoa", "ryu", @@ -855,9 +840,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" +checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" dependencies = [ "proc-macro2", "quote", @@ -906,6 +891,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.9.0" @@ -914,9 +908,9 @@ checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -930,9 +924,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" dependencies = [ "proc-macro2", "quote", @@ -967,18 +961,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" dependencies = [ "proc-macro2", "quote", @@ -996,9 +990,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.20.0" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e" +checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95" dependencies = [ "autocfg", "bytes", @@ -1007,7 +1001,7 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", @@ -1028,9 +1022,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -1050,9 +1044,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ "cfg-if", "pin-project-lite", @@ -1073,9 +1067,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" dependencies = [ "once_cell", "valuable", @@ -1143,9 +1137,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "valuable" @@ -1153,6 +1147,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "waker-fn" version = "1.1.0" @@ -1295,9 +1295,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45dfcdcf87b71dad505d30cc27b1b7b88a64b6d1c435648f48f9dbc1fdc4b7e1" +checksum = "41a408fd8a352695690f53906dc7fd036be924ec51ea5e05666ff42685ed0af5" dependencies = [ "serde", "static_assertions", @@ -1306,9 +1306,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.4.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2c71467724d4a77f0a1f0339dab10ca5d63f6a82411289cdcdfbfd47d2e407" +checksum = "1bd68e4e6432ef19df47d7e90e2e72b5e7e3d778e0ae3baddf12b951265cc758" dependencies = [ "byteorder", "enumflags2", @@ -1320,9 +1320,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "3.4.1" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c47f3630ce926a03abf21f5a8db90c60c81ed71599b5c86ad1a54fd3c7564c5" +checksum = "08e977eaa3af652f63d479ce50d924254ad76722a6289ec1a1eac3231ca30430" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 8e98d99..2ab6b6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,8 +11,9 @@ publish = false async-signals = "0.4" color-eyre = "0.6" futures-util = "0.3" +launch-pad = { git = "https://github.com/pop-os/launch-pad" } libc = "0.2" -nix = { version = "0.24", features = ["fs"], default-features = false } +nix = { version = "0.25", features = ["fs"], default-features = false } scopeguard = "1" sendfd = { version = "0.4", features = ["tokio"] } serde = { version = "1", features = ["derive"] } diff --git a/src/comp.rs b/src/comp.rs index 95e3387..3e06ec8 100644 --- a/src/comp.rs +++ b/src/comp.rs @@ -1,5 +1,4 @@ // SPDX-License-Identifier: GPL-3.0-only -use crate::process::{ProcessEvent, ProcessHandler}; use color_eyre::eyre::{Result, WrapErr}; use sendfd::SendWithFd; use serde::{Deserialize, Serialize}; @@ -51,28 +50,6 @@ pub fn create_privileged_socket( Ok((env_vars, client_fd)) } -async fn receive_event(rx: &mut mpsc::UnboundedReceiver) -> Option<()> { - match rx.recv().await? { - ProcessEvent::Started => { - info!("started"); - Some(()) - } - // cosmic-comp outputs everything to stderr because slog - ProcessEvent::Stdout(line) | ProcessEvent::Stderr(line) => { - info!("{}", line); - Some(()) - } - ProcessEvent::Ended(Some(status)) => { - error!("exited with status {}", status); - None - } - ProcessEvent::Ended(None) => { - error!("exited"); - None - } - } -} - // Cancellation safe! #[derive(Default)] struct IpcState { @@ -197,7 +174,6 @@ pub fn run_compositor( mut socket_rx: mpsc::UnboundedReceiver>, env_tx: oneshot::Sender>, ) -> Result>> { - let (tx, mut rx) = unbounded_channel::(); // Create a pair of unix sockets - one for us (session), // one for the compositor (comp) let (session, comp) = UnixStream::pair().wrap_err("failed to create pair of unix sockets")?; diff --git a/src/generic.rs b/src/generic.rs deleted file mode 100644 index 627e92f..0000000 --- a/src/generic.rs +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -use crate::process::{ProcessEvent, ProcessHandler}; -use std::os::unix::io::OwnedFd; -use tokio::sync::mpsc::unbounded_channel; -use tokio_util::sync::CancellationToken; -use tracing::{Instrument, Span}; - -pub fn run_executable( - token: CancellationToken, - span: Span, - executable: &'static str, - args: Vec, - env_vars: Vec<(String, String)>, - fds: Vec, -) { - let span_2 = span.clone(); - let (tx, mut rx) = unbounded_channel::(); - tokio::spawn( - async move { - ProcessHandler::new(tx, &token).run(executable, args, env_vars, fds, &span); - while let Some(event) = rx.recv().await { - match event { - ProcessEvent::Started => { - info!("started"); - } - ProcessEvent::Stdout(line) => { - info!("{}", line); - } - ProcessEvent::Stderr(line) => { - error!("{}", line); - } - ProcessEvent::Ended(Some(status)) => { - error!("exited with status {}", status); - return; - } - ProcessEvent::Ended(None) => { - error!("exited"); - return; - } - } - } - } - .instrument(span_2), - ); -} diff --git a/src/main.rs b/src/main.rs index 4a07a64..484999f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,6 @@ extern crate tracing; mod comp; -mod generic; mod process; mod service; mod systemd; @@ -11,6 +10,7 @@ mod systemd; use async_signals::Signals; use color_eyre::{eyre::WrapErr, Result}; use futures_util::StreamExt; +use launch_pad::{process::Process, ProcessManager}; use tokio::sync::{mpsc, oneshot}; use tokio_util::sync::CancellationToken; use tracing::metadata::LevelFilter; @@ -55,70 +55,32 @@ async fn main() -> Result<()> { .collect::>(); info!("got environmental variables: {:?}", env_vars); + let process_manager = ProcessManager::new().await; let mut sockets = Vec::with_capacity(2); let (env, fd) = comp::create_privileged_socket(&mut sockets, &env_vars) .wrap_err("failed to create panel socket")?; - generic::run_executable( - token.child_token(), - info_span!(parent: None, "cosmic-panel"), - "cosmic-panel", - vec![], - env, - vec![fd], + process_manager.start(Process::new().with_executable("cosmic-panel").with_env(env)); + let (env, fd) = comp::create_privileged_socket(&mut sockets, &env_vars) + .wrap_err("failed to create applet host")?; + process_manager.start( + Process::new() + .with_executable("cosmic-applet-host") + .with_env(env), ); let (env, fd) = comp::create_privileged_socket(&mut sockets, &env_vars) .wrap_err("failed to create applet host")?; - generic::run_executable( - token.child_token(), - info_span!(parent: None, "cosmic-applet-host"), - "cosmic-applet-host", - vec![], - env, - vec![fd], - ); - let (env, fd) = comp::create_privileged_socket(&mut sockets, &env_vars) - .wrap_err("failed to create applet host")?; - generic::run_executable( - token.child_token(), - info_span!(parent: None, "swaybg"), - "swaybg", - vec![ - "-i".into(), - "/usr/share/backgrounds/pop/kate-hazen-COSMIC-desktop-wallpaper.png".into(), - ], - env, - vec![fd], - ); - generic::run_executable( - token.child_token(), - info_span!(parent: None, "cosmic-settings-daemon"), - "cosmic-settings-daemon", - vec![], - vec![], - vec![], - ); - let (env, fd) = comp::create_privileged_socket(&mut sockets, &env_vars) - .wrap_err("failed to create applet host")?; - generic::run_executable( - token.child_token(), - info_span!(parent: None, "cosmic-osd"), - "cosmic-osd", - vec![], - env, - vec![fd], - ); - let (env, fd) = comp::create_privileged_socket(&mut sockets, &env_vars) - .wrap_err("failed to create applet host")?; - generic::run_executable( - token.child_token(), - info_span!(parent: None, "xdg-desktop-portal-cosmic"), - "/usr/libexec/xdg-desktop-portal-cosmic", - vec![], - env, - vec![fd], + process_manager.start( + Process::new() + .with_executable("swaybg") + .with_args(&[ + "-i", + "/usr/share/backgrounds/pop/kate-hazen-COSMIC-desktop-wallpaper.png", + ]) + .with_env(env), ); socket_tx.send(sockets).unwrap(); + process_manager.start(Process::new().with_executable("cosmic-settings-daemon")); let (exit_tx, exit_rx) = oneshot::channel(); let _ = ConnectionBuilder::session()? diff --git a/src/process.rs b/src/process.rs index 32eaa83..c803089 100644 --- a/src/process.rs +++ b/src/process.rs @@ -1,135 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only use color_eyre::eyre::{ContextCompat, Result, WrapErr}; use nix::fcntl; -use std::{ - os::unix::prelude::*, - process::{ExitStatus, Stdio}, -}; -use tokio::{ - io::{AsyncBufReadExt, BufReader}, - process::Command, - sync::mpsc::UnboundedSender, -}; -use tokio_util::sync::CancellationToken; -use tracing::{Instrument, Span}; - -pub enum ProcessEvent { - Started, - Stdout(String), - Stderr(String), - Ended(Option), -} - -pub struct ProcessHandler { - tx: UnboundedSender, - cancellation_token: CancellationToken, -} - -impl ProcessHandler { - pub fn new(tx: UnboundedSender, cancellation_token: &CancellationToken) -> Self { - Self { - tx, - cancellation_token: cancellation_token.child_token(), - } - } - - // TODO: Use `OwnedFd` when stable - pub fn run( - self, - executable: impl ToString, - args: Vec, - vars: Vec<(String, String)>, - fds: Vec, - span: &Span, - ) { - let executable = executable.to_string(); - tokio::spawn( - async move { - for fd in &fds { - if let Err(err) = mark_as_not_cloexec(fd) { - error!("failed to launch '{}': {}", executable, err); - return; - } - } - let mut child = match Command::new(&executable) - .args(&args) - .stdin(Stdio::null()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()) - .envs(vars) - .kill_on_drop(true) - .spawn() - { - Ok(child) => child, - Err(error) => { - error!( - "failed to launch '{} {}': {}", - executable, - args.join(" "), - error - ); - return; - } - }; - drop(fds); - let mut stdout = BufReader::new(child.stdout.take().unwrap()).lines(); - let mut stderr = BufReader::new(child.stderr.take().unwrap()).lines(); - std::mem::drop(self.tx.send(ProcessEvent::Started)); - loop { - tokio::select! { - status = child.wait() => match status { - Ok(status) => { - info!("'{}' exited with status {}", executable, status); - std::mem::drop(self.tx.send(ProcessEvent::Ended(Some(status)))); - return; - } - Err(error) => { - error!( - "failed to wait for '{}' to end: {}", - executable, - error - ); - return; - } - }, - line = stdout.next_line() => match line { - Ok(Some(line)) => { - std::mem::drop(self.tx.send(ProcessEvent::Stdout(line))); - }, - Ok(None) => (), - Err(error) => { - warn!( - "failed to get stdout line from '{}': {}", - executable, - error - ); - } - }, - line = stderr.next_line() => match line { - Ok(Some(line)) => { - std::mem::drop(self.tx.send(ProcessEvent::Stderr(line))); - }, - Ok(None) => (), - Err(error) => { - warn!( - "failed to get stderr line from '{}': {}", - executable, - error - ); - } - }, - _ = self.cancellation_token.cancelled() => { - warn!("exiting '{}': cancelled", executable); - std::mem::drop(self.tx.send(ProcessEvent::Ended(None))); - return; - } - } - } - } - .instrument(span.clone()), - ); - } -} +use std::os::unix::prelude::*; fn mark_as_not_cloexec(file: &impl AsFd) -> Result<()> { let raw_fd = file.as_fd().as_raw_fd();