From 4679a071a12d8d4b689ba4989650850ae43c1044 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 16:02:03 -0700 Subject: [PATCH 01/14] Cargo.toml: Use more recommended practices --- Cargo.lock | 519 ++++++++++++++++++++++++++++++++++++----------------- Cargo.toml | 10 +- 2 files changed, 362 insertions(+), 167 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 909e281..397906e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,32 +32,34 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" dependencies = [ - "event-listener", + "event-listener 2.5.3", "futures-core", ] [[package]] name = "async-channel" -version = "1.9.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", "futures-core", + "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.5.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock", + "async-lock 3.3.0", "async-task", "concurrent-queue", - "fastrand 1.9.0", - "futures-lite", + "fastrand 2.0.0", + "futures-lite 2.0.0", "slab", ] @@ -67,10 +69,10 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "blocking", - "futures-lite", + "futures-lite 1.13.0", ] [[package]] @@ -79,45 +81,74 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix 0.37.23", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2 0.4.9", + "socket2 0.4.10", "waker-fn", ] +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.0.0", + "parking", + "polling 3.5.0", + "rustix 0.38.32", + "slab", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "async-lock" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "event-listener", + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", ] [[package]] name = "async-process" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ - "async-io", - "async-lock", - "autocfg", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", "blocking", "cfg-if", - "event-listener", - "futures-lite", - "rustix 0.37.23", - "signal-hook", - "windows-sys", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.32", + "windows-sys 0.48.0", ] [[package]] @@ -128,24 +159,42 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.3.2", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.32", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", ] [[package]] name = "async-task" -version = "4.4.0" +version = "4.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", ] [[package]] @@ -198,24 +247,25 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ "async-channel", - "async-lock", + "async-lock 3.3.0", "async-task", - "atomic-waker", - "fastrand 1.9.0", - "futures-lite", - "log", + "fastrand 2.0.0", + "futures-io", + "futures-lite 2.0.0", + "piper", + "tracing", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -298,9 +348,9 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" dependencies = [ "enumflags2_derive", "serde", @@ -308,13 +358,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", ] [[package]] @@ -325,23 +375,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.3" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -350,6 +389,59 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.2.0", + "pin-project-lite", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -367,15 +459,15 @@ checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" @@ -393,22 +485,37 @@ dependencies = [ ] [[package]] -name = "futures-sink" -version = "0.3.28" +name = "futures-lite" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9c1155db57329dca6d018b61e76b1488ce9a2e5e44028cac420a5898f4fcef63" +dependencies = [ + "fastrand 2.0.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", "futures-io", @@ -492,14 +599,14 @@ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "libc" -version = "0.2.148" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "linux-raw-sys" @@ -509,15 +616,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.7" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" @@ -534,6 +641,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -551,7 +667,7 @@ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -563,7 +679,7 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset", + "memoffset 0.7.1", ] [[package]] @@ -619,6 +735,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.0", + "futures-io", +] + [[package]] name = "polling" version = "2.8.0" @@ -632,7 +759,21 @@ dependencies = [ "libc", "log", "pin-project-lite", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.32", + "tracing", + "windows-sys 0.52.0", ] [[package]] @@ -653,18 +794,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -710,9 +851,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.5" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", @@ -722,9 +863,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.8" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -733,9 +874,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rustc-demangle" @@ -745,29 +886,29 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.37.23" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", "io-lifetimes", "libc", "linux-raw-sys 0.3.8", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "rustix" -version = "0.38.13" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ "bitflags 2.4.0", "errno", "libc", - "linux-raw-sys 0.4.7", - "windows-sys", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", ] [[package]] @@ -787,41 +928,31 @@ checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", ] [[package]] name = "serde_repr" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", ] [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", "digest", ] -[[package]] -name = "signal-hook" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -842,9 +973,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -857,7 +988,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -868,7 +999,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "steamos-manager" -version = "0.9.0" +version = "24.3.0" dependencies = [ "tokio", "zbus", @@ -888,9 +1019,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.33" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9caece70c63bfba29ec2fed841a09851b14a235c60010fa4de58089b6c025668" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -906,8 +1037,8 @@ dependencies = [ "cfg-if", "fastrand 2.0.0", "redox_syscall", - "rustix 0.38.13", - "windows-sys", + "rustix 0.38.32", + "windows-sys 0.48.0", ] [[package]] @@ -926,7 +1057,7 @@ dependencies = [ "socket2 0.5.4", "tokio-macros", "tracing", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -937,14 +1068,14 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" @@ -959,11 +1090,10 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -971,20 +1101,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.33", + "syn 2.0.53", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -997,10 +1127,11 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "uds_windows" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ + "memoffset 0.9.0", "tempfile", "winapi", ] @@ -1057,7 +1188,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", ] [[package]] @@ -1066,13 +1206,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -1081,42 +1236,84 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + [[package]] name = "winnow" version = "0.5.15" @@ -1128,25 +1325,25 @@ dependencies = [ [[package]] name = "xdg-home" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" dependencies = [ - "nix", + "libc", "winapi", ] [[package]] name = "zbus" -version = "3.14.1" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" dependencies = [ "async-broadcast", "async-executor", "async-fs", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "async-process", "async-recursion", "async-task", @@ -1155,7 +1352,7 @@ dependencies = [ "byteorder", "derivative", "enumflags2", - "event-listener", + "event-listener 2.5.3", "futures-core", "futures-sink", "futures-util", @@ -1180,9 +1377,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.14.1" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1194,9 +1391,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" dependencies = [ "serde", "static_assertions", @@ -1205,9 +1402,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.15.0" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" dependencies = [ "byteorder", "enumflags2", @@ -1219,9 +1416,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "3.15.0" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 4b4e8b6..073bbc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "steamos-manager" -version = "0.9.0" +version = "24.3.0" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [profile.release] strip="symbols" [dependencies] -tokio = { version = "1.33.0", features = ["fs", "process", "io-std", "rt-multi-thread", "macros"] } -zbus = { version = "3.14.1", features = ["tokio"] } -zbus_macros = "3.14.1" +tokio = { version = "1", features = ["fs", "process", "io-std", "rt-multi-thread", "macros"] } +zbus = { version = "3", features = ["tokio"] } +zbus_macros = "3" From 5afe7222ca8e15835207b0f8cc2f2a2583719e11 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 16:03:24 -0700 Subject: [PATCH 02/14] Upgrade to zbus 4 --- Cargo.lock | 278 +++++++++++++------------------------------------ Cargo.toml | 3 +- src/manager.rs | 21 ++-- 3 files changed, 81 insertions(+), 221 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 397906e..032bdbd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,12 +28,14 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" dependencies = [ - "event-listener 2.5.3", + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", "futures-core", + "pin-project-lite", ] [[package]] @@ -58,41 +60,20 @@ dependencies = [ "async-lock 3.3.0", "async-task", "concurrent-queue", - "fastrand 2.0.0", - "futures-lite 2.0.0", + "fastrand", + "futures-lite", "slab", ] [[package]] name = "async-fs" -version = "1.6.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +checksum = "bc19683171f287921f2405677dd2ed2549c3b3bda697a563ebc3a121ace2aba1" dependencies = [ - "async-lock 2.8.0", - "autocfg", + "async-lock 3.3.0", "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", + "futures-lite", ] [[package]] @@ -105,10 +86,10 @@ dependencies = [ "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.0.0", + "futures-lite", "parking", - "polling 3.5.0", - "rustix 0.38.32", + "polling", + "rustix", "slab", "tracing", "windows-sys 0.52.0", @@ -136,19 +117,20 @@ dependencies = [ [[package]] name = "async-process" -version = "1.8.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "451e3cf68011bd56771c79db04a9e333095ab6349f7e47592b788e9b98720cc8" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", + "async-channel", + "async-io", + "async-lock 3.3.0", "async-signal", "blocking", "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.32", - "windows-sys 0.48.0", + "event-listener 5.2.0", + "futures-lite", + "rustix", + "windows-sys 0.52.0", ] [[package]] @@ -168,13 +150,13 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" dependencies = [ - "async-io 2.3.2", + "async-io", "async-lock 2.8.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.32", + "rustix", "signal-hook-registry", "slab", "windows-sys 0.48.0", @@ -254,19 +236,13 @@ dependencies = [ "async-channel", "async-lock 3.3.0", "async-task", - "fastrand 2.0.0", + "fastrand", "futures-io", - "futures-lite 2.0.0", + "futures-lite", "piper", "tracing", ] -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.5.0" @@ -288,6 +264,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "concurrent-queue" version = "2.2.0" @@ -346,6 +328,12 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + [[package]] name = "enumflags2" version = "0.7.9" @@ -389,17 +377,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "4.0.3" @@ -442,15 +419,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.0.0" @@ -469,28 +437,13 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "futures-lite" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c1155db57329dca6d018b61e76b1488ce9a2e5e44028cac420a5898f4fcef63" dependencies = [ - "fastrand 2.0.0", + "fastrand", "futures-core", "futures-io", "memchr", @@ -582,65 +535,24 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" -[[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - [[package]] name = "memchr" version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.0" @@ -672,14 +584,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.4" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "cfg-if", + "cfg_aliases", "libc", - "memoffset 0.7.1", + "memoffset", ] [[package]] @@ -742,26 +655,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" dependencies = [ "atomic-waker", - "fastrand 2.0.0", + "fastrand", "futures-io", ] -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - [[package]] name = "polling" version = "3.5.0" @@ -771,7 +668,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "pin-project-lite", - "rustix 0.38.32", + "rustix", "tracing", "windows-sys 0.52.0", ] @@ -784,11 +681,10 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "once_cell", "toml_edit", ] @@ -884,20 +780,6 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.32" @@ -907,7 +789,7 @@ dependencies = [ "bitflags 2.4.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys", "windows-sys 0.52.0", ] @@ -971,16 +853,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.4" @@ -1003,7 +875,6 @@ version = "24.3.0" dependencies = [ "tokio", "zbus", - "zbus_macros", ] [[package]] @@ -1035,9 +906,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ "cfg-if", - "fastrand 2.0.0", + "fastrand", "redox_syscall", - "rustix 0.38.32", + "rustix", "windows-sys 0.48.0", ] @@ -1054,7 +925,7 @@ dependencies = [ "num_cpus", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", + "socket2", "tokio-macros", "tracing", "windows-sys 0.48.0", @@ -1079,9 +950,9 @@ checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", @@ -1131,7 +1002,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ - "memoffset 0.9.0", + "memoffset", "tempfile", "winapi", ] @@ -1335,30 +1206,28 @@ dependencies = [ [[package]] name = "zbus" -version = "3.15.2" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +checksum = "c9ff46f2a25abd690ed072054733e0bc3157e3d4c45f41bd183dce09c2ff8ab9" dependencies = [ "async-broadcast", "async-executor", "async-fs", - "async-io 1.13.0", - "async-lock 2.8.0", + "async-io", + "async-lock 3.3.0", "async-process", "async-recursion", "async-task", "async-trait", "blocking", - "byteorder", "derivative", "enumflags2", - "event-listener 2.5.3", + "event-listener 5.2.0", "futures-core", "futures-sink", "futures-util", "hex", "nix", - "once_cell", "ordered-stream", "rand", "serde", @@ -1368,7 +1237,7 @@ dependencies = [ "tokio", "tracing", "uds_windows", - "winapi", + "windows-sys 0.52.0", "xdg-home", "zbus_macros", "zbus_names", @@ -1377,9 +1246,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.15.2" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +checksum = "4e0e3852c93dcdb49c9462afe67a2a468f7bd464150d866e861eaf06208633e0" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1391,9 +1260,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.6.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", @@ -1402,13 +1271,12 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.15.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" +checksum = "2c1b3ca6db667bfada0f1ebfc94b2b1759ba25472ee5373d4551bb892616389a" dependencies = [ - "byteorder", + "endi", "enumflags2", - "libc", "serde", "static_assertions", "zvariant_derive", @@ -1416,9 +1284,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "3.15.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +checksum = "b7a4b236063316163b69039f77ce3117accb41a09567fd24c168e43491e521bc" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1429,9 +1297,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 073bbc4..c9fee4b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,5 +8,4 @@ strip="symbols" [dependencies] tokio = { version = "1", features = ["fs", "process", "io-std", "rt-multi-thread", "macros"] } -zbus = { version = "3", features = ["tokio"] } -zbus_macros = "3" +zbus = { version = "4", features = ["tokio"] } diff --git a/src/manager.rs b/src/manager.rs index 513c406..43dfd77 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -23,10 +23,9 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use std::{ fs, ffi::OsStr, fmt, os::fd::{FromRawFd, IntoRawFd} }; +use std::{ fs, ffi::OsStr, fmt }; use tokio::{fs::File, io::AsyncWriteExt, process::Command}; -use zbus::zvariant::OwnedFd; -use zbus_macros::dbus_interface; +use zbus::{ interface, zvariant::Fd }; #[derive(PartialEq, Debug, Copy, Clone)] #[repr(u32)] @@ -211,7 +210,7 @@ async fn start_tracing(buffer_size:u32, should_trace: bool) -> std::io::Result Result { + ) -> Result { // Get the file descriptor for the als integration time sysfs path // /sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time // Return -1 on error - let result = File::create("/sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time").await; + let result = std::fs::File::create("/sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time"); match result { - Ok(f) => { - let raw = f.into_std().await.into_raw_fd(); - unsafe { - let fd: OwnedFd = OwnedFd::from_raw_fd(raw); - Ok(fd) - } - } + Ok(f) => Ok(Fd::Owned(std::os::fd::OwnedFd::from(f))), Err(message) => { println!("Error opening sysfs file for giving file descriptor {message}"); Err(zbus::fdo::Error::IOError(message.to_string())) @@ -611,7 +604,7 @@ impl SMManager { } /// A version property. - #[dbus_interface(property)] + #[zbus(property)] async fn version(&self) -> u32 { SMManager::API_VERSION } From 7217b0c2b13818c19f36a2cebb903ce20ee280e6 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 16:04:07 -0700 Subject: [PATCH 03/14] Run cargo fmt --- src/manager.rs | 165 +++++++++++++++++++++++++------------------------ 1 file changed, 84 insertions(+), 81 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 43dfd77..7322cbd 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -23,9 +23,9 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use std::{ fs, ffi::OsStr, fmt }; +use std::{ffi::OsStr, fmt, fs}; use tokio::{fs::File, io::AsyncWriteExt, process::Command}; -use zbus::{ interface, zvariant::Fd }; +use zbus::{interface, zvariant::Fd}; #[derive(PartialEq, Debug, Copy, Clone)] #[repr(u32)] @@ -36,16 +36,13 @@ enum WifiDebugMode { impl TryFrom for WifiDebugMode { type Error = &'static str; - fn try_from(v: u32) -> Result - { + fn try_from(v: u32) -> Result { match v { x if x == WifiDebugMode::Off as u32 => Ok(WifiDebugMode::Off), x if x == WifiDebugMode::On as u32 => Ok(WifiDebugMode::On), - _ => { Err("No enum match for value {v}") }, + _ => Err("No enum match for value {v}"), } - } - } impl fmt::Display for WifiDebugMode { @@ -64,10 +61,8 @@ pub struct SMManager { should_trace: bool, } -impl SMManager -{ - pub fn new() -> Self - { +impl SMManager { + pub fn new() -> Self { SMManager { wifi_debug_mode: WifiDebugMode::Off, should_trace: is_galileo().unwrap(), @@ -75,17 +70,13 @@ impl SMManager } } -impl Default for SMManager -{ - fn default() -> Self - { +impl Default for SMManager { + fn default() -> Self { SMManager::new() } - } -const OVERRIDE_CONTENTS: &str = -"[Service] +const OVERRIDE_CONTENTS: &str = "[Service] ExecStart= ExecStart=/usr/lib/iwd/iwd -d "; @@ -99,8 +90,7 @@ const MIN_BUFFER_SIZE: u32 = 100; const BOARD_NAME_PATH: &str = "/sys/class/dmi/id/board_name"; const GALILEO_NAME: &str = "Galileo"; -fn is_galileo() -> std::io::Result -{ +fn is_galileo() -> std::io::Result { let mut board_name = fs::read_to_string(BOARD_NAME_PATH)?; board_name = board_name.trim().to_string(); @@ -108,19 +98,18 @@ fn is_galileo() -> std::io::Result Ok(matches) } -async fn script_exit_code( - executable: &str, - args: &[impl AsRef], -) -> std::io::Result { +async fn script_exit_code(executable: &str, args: &[impl AsRef]) -> std::io::Result { // Run given script and return true on success - let mut child = Command::new(executable) - .args(args) - .spawn()?; + let mut child = Command::new(executable).args(args).spawn()?; let status = child.wait().await?; Ok(status.success()) } -async fn run_script(name: &str, executable: &str, args: &[impl AsRef]) -> std::io::Result { +async fn run_script( + name: &str, + executable: &str, + args: &[impl AsRef], +) -> std::io::Result { // Run given script to get exit code and return true on success. // Return false on failure, but also print an error if needed match script_exit_code(executable, args).await { @@ -148,9 +137,8 @@ async fn script_output( Ok(s.to_string()) } -async fn setup_iwd_config(want_override: bool) -> Result<(), std::io::Error> -{ - // Copy override.conf file into place or out of place depending +async fn setup_iwd_config(want_override: bool) -> Result<(), std::io::Error> { + // Copy override.conf file into place or out of place depending // on install value if want_override { @@ -165,8 +153,7 @@ async fn setup_iwd_config(want_override: bool) -> Result<(), std::io::Error> } } -async fn restart_iwd() -> std::io::Result -{ +async fn restart_iwd() -> std::io::Result { // First reload systemd since we modified the config most likely // othorwise we wouldn't be restarting iwd. match run_script("reload systemd", "systemctl", &["daemon-reload"]).await { @@ -179,7 +166,7 @@ async fn restart_iwd() -> std::io::Result println!("restart_iwd: reload systemd failed somehow"); Ok(false) } - }, + } Err(message) => { println!("restart_iwd: reload systemd got an error {message}"); Err(message) @@ -187,8 +174,7 @@ async fn restart_iwd() -> std::io::Result } } -async fn stop_tracing(should_trace: bool) -> std::io::Result -{ +async fn stop_tracing(should_trace: bool) -> std::io::Result { if !should_trace { return Ok(true); } @@ -196,18 +182,27 @@ async fn stop_tracing(should_trace: bool) -> std::io::Result // Stop tracing and extract ring buffer to disk for capture run_script("stop tracing", "trace-cmd", &["stop"]).await?; // stop tracing worked - run_script("extract traces", "trace-cmd", &["extract", "-o", OUTPUT_FILE]).await + run_script( + "extract traces", + "trace-cmd", + &["extract", "-o", OUTPUT_FILE], + ) + .await } -async fn start_tracing(buffer_size:u32, should_trace: bool) -> std::io::Result -{ +async fn start_tracing(buffer_size: u32, should_trace: bool) -> std::io::Result { if !should_trace { return Ok(true); } // Start tracing let size_str = format!("{}", buffer_size); - run_script("start tracing", "trace-cmd", &["start", "-e", "ath11k_wmi_diag", "-b", &size_str]).await + run_script( + "start tracing", + "trace-cmd", + &["start", "-e", "ath11k_wmi_diag", "-b", &size_str], + ) + .await } #[interface(name = "com.steampowered.SteamOSManager1")] @@ -221,8 +216,8 @@ impl SMManager { async fn factory_reset(&self) -> bool { // Run steamos factory reset script and return true on success match run_script("factory reset", "steamos-factory-reset-config", &[""]).await { - Ok(value) => { value }, - Err(_) => { false } + Ok(value) => value, + Err(_) => false, } } @@ -233,9 +228,10 @@ impl SMManager { "/usr/bin/steamos-polkit-helpers/steamos-disable-wireless-power-management", &[""], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } @@ -247,9 +243,10 @@ impl SMManager { "systemcltl", &["start", "jupiter-fan-control-service"], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } else { match run_script( @@ -257,9 +254,10 @@ impl SMManager { "systemctl", &["stop", "jupiter-fan-control.service"], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } } @@ -268,8 +266,8 @@ impl SMManager { // Run jupiter-check-support note this script does exit 1 for "Support: No" case // so no need to parse output, etc. match run_script("check hardware support", "jupiter-check-support", &[""]).await { - Ok(value) => { value }, - Err(_) => { false } + Ok(value) => value, + Err(_) => false, } } @@ -297,9 +295,10 @@ impl SMManager { "/usr/bin/steamos-potlkit-helpers/jupiter-biosupdate", &["--auto"], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } @@ -311,9 +310,10 @@ impl SMManager { "/usr/bin/steamos-polkit-helpers/jupiter-dock-updater", &[""], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } @@ -325,9 +325,10 @@ impl SMManager { "/usr/bin/steamos-polkit-helpers/steamos-trim-devices", &[""], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } @@ -339,9 +340,10 @@ impl SMManager { "/usr/bin/steamos-polkit-helpers/steamos-format-sdcard", &[""], ) - .await { - Ok(value) => { value }, - Err(_) => { false } + .await + { + Ok(value) => value, + Err(_) => false, } } @@ -475,9 +477,7 @@ impl SMManager { } } - async fn get_als_integration_time_file_descriptor( - &self, - ) -> Result { + async fn get_als_integration_time_file_descriptor(&self) -> Result { // Get the file descriptor for the als integration time sysfs path // /sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time // Return -1 on error @@ -520,33 +520,36 @@ impl SMManager { self.wifi_debug_mode = WifiDebugMode::Off; } else { // restart_iwd failed - println!("restart_iwd failed somehow, check log above"); + println!( + "restart_iwd failed somehow, check log above" + ); return false; } - }, + } Err(message) => { println!("restart_iwd got an error {message}"); return false; } } - }, + } Err(message) => { - println!("setup_iwd_config false got an error somehow {message}"); + println!( + "setup_iwd_config false got an error somehow {message}" + ); return false; } } } else { println!("stop_tracing command failed somehow, bailing"); return false; - } - }, + } Err(message) => { println!("stop_tracing command had an error {message}"); return false; } } - }, + } Ok(WifiDebugMode::On) => { // If mode is 1 enable wifi debug mode if buffer_size < MIN_BUFFER_SIZE { @@ -570,7 +573,7 @@ impl SMManager { println!("start_tracing failed somehow"); return false; } - }, + } Err(message) => { println!("start_tracing got an error {message}"); return false; @@ -580,24 +583,24 @@ impl SMManager { println!("restart_iwd failed somehow"); return false; } - }, + } Err(message) => { println!("restart_iwd got an error {message}"); return false; } } - }, + } Err(message) => { println!("setup_iwd_config true got an error somehow {message}"); return false; } } - }, + } Err(_) => { // Invalid mode requested, more coming later, but add this catch-all for now - println!("Invalid wifi debug mode {mode} requested"); + println!("Invalid wifi debug mode {mode} requested"); return false; - }, + } } true From cf416c8a560733c365a19f20dcbf757b9af6024b Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 16:23:58 -0700 Subject: [PATCH 04/14] manager: Unify error handling on anyhow --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/manager.rs | 22 ++++++++++------------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 032bdbd..94effc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,6 +26,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "anyhow" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" + [[package]] name = "async-broadcast" version = "0.7.0" @@ -873,6 +879,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" name = "steamos-manager" version = "24.3.0" dependencies = [ + "anyhow", "tokio", "zbus", ] diff --git a/Cargo.toml b/Cargo.toml index c9fee4b..944d17e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,6 @@ edition = "2021" strip="symbols" [dependencies] +anyhow = "1" tokio = { version = "1", features = ["fs", "process", "io-std", "rt-multi-thread", "macros"] } zbus = { version = "4", features = ["tokio"] } diff --git a/src/manager.rs b/src/manager.rs index 7322cbd..51ca239 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -23,6 +23,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +use anyhow::Result; use std::{ffi::OsStr, fmt, fs}; use tokio::{fs::File, io::AsyncWriteExt, process::Command}; use zbus::{interface, zvariant::Fd}; @@ -90,7 +91,7 @@ const MIN_BUFFER_SIZE: u32 = 100; const BOARD_NAME_PATH: &str = "/sys/class/dmi/id/board_name"; const GALILEO_NAME: &str = "Galileo"; -fn is_galileo() -> std::io::Result { +fn is_galileo() -> Result { let mut board_name = fs::read_to_string(BOARD_NAME_PATH)?; board_name = board_name.trim().to_string(); @@ -98,7 +99,7 @@ fn is_galileo() -> std::io::Result { Ok(matches) } -async fn script_exit_code(executable: &str, args: &[impl AsRef]) -> std::io::Result { +async fn script_exit_code(executable: &str, args: &[impl AsRef]) -> Result { // Run given script and return true on success let mut child = Command::new(executable).args(args).spawn()?; let status = child.wait().await?; @@ -109,7 +110,7 @@ async fn run_script( name: &str, executable: &str, args: &[impl AsRef], -) -> std::io::Result { +) -> Result { // Run given script to get exit code and return true on success. // Return false on failure, but also print an error if needed match script_exit_code(executable, args).await { @@ -124,20 +125,17 @@ async fn run_script( async fn script_output( executable: &str, args: &[impl AsRef], -) -> Result> { +) -> Result { // Run given command and return the output given let output = Command::new(executable).args(args).output(); let output = output.await?; - let s = match std::str::from_utf8(&output.stdout) { - Ok(v) => v, - Err(e) => panic!("Invalid UTF-8 sequence: {}", e), - }; + let s = std::str::from_utf8(&output.stdout)?; Ok(s.to_string()) } -async fn setup_iwd_config(want_override: bool) -> Result<(), std::io::Error> { +async fn setup_iwd_config(want_override: bool) -> std::io::Result<()> { // Copy override.conf file into place or out of place depending // on install value @@ -153,7 +151,7 @@ async fn setup_iwd_config(want_override: bool) -> Result<(), std::io::Error> { } } -async fn restart_iwd() -> std::io::Result { +async fn restart_iwd() -> Result { // First reload systemd since we modified the config most likely // othorwise we wouldn't be restarting iwd. match run_script("reload systemd", "systemctl", &["daemon-reload"]).await { @@ -174,7 +172,7 @@ async fn restart_iwd() -> std::io::Result { } } -async fn stop_tracing(should_trace: bool) -> std::io::Result { +async fn stop_tracing(should_trace: bool) -> Result { if !should_trace { return Ok(true); } @@ -190,7 +188,7 @@ async fn stop_tracing(should_trace: bool) -> std::io::Result { .await } -async fn start_tracing(buffer_size: u32, should_trace: bool) -> std::io::Result { +async fn start_tracing(buffer_size: u32, should_trace: bool) -> Result { if !should_trace { return Ok(true); } From 2e55bc2330af6e0a541b49b47beafa39b1fb2b4f Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 16:38:16 -0700 Subject: [PATCH 05/14] manager: Clean up non-idiomatic code --- src/main.rs | 5 +- src/manager.rs | 128 ++++++++++++++++--------------------------------- 2 files changed, 45 insertions(+), 88 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0336182..0327153 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,7 +23,8 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use zbus::{ConnectionBuilder, Result}; +use anyhow::Result; +use zbus::ConnectionBuilder; pub mod manager; @@ -32,7 +33,7 @@ async fn main() -> Result<()> { // This daemon is responsible for creating a dbus api that steam client can use to do various OS // level things. It implements com.steampowered.SteamOSManager1 interface - let manager = manager::SMManager::default(); + let manager = manager::SMManager::new()?; let _system_connection = ConnectionBuilder::system()? .name("com.steampowered.SteamOSManager1")? diff --git a/src/manager.rs b/src/manager.rs index 51ca239..1defe4a 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -63,17 +63,11 @@ pub struct SMManager { } impl SMManager { - pub fn new() -> Self { - SMManager { + pub fn new() -> Result { + Ok(SMManager { wifi_debug_mode: WifiDebugMode::Off, - should_trace: is_galileo().unwrap(), - } - } -} - -impl Default for SMManager { - fn default() -> Self { - SMManager::new() + should_trace: is_galileo()?, + }) } } @@ -106,26 +100,15 @@ async fn script_exit_code(executable: &str, args: &[impl AsRef]) -> Resul Ok(status.success()) } -async fn run_script( - name: &str, - executable: &str, - args: &[impl AsRef], -) -> Result { +async fn run_script(name: &str, executable: &str, args: &[impl AsRef]) -> Result { // Run given script to get exit code and return true on success. // Return false on failure, but also print an error if needed - match script_exit_code(executable, args).await { - Ok(value) => Ok(value), - Err(err) => { - println!("Error running {} {}", name, err); - Err(err) - } - } + script_exit_code(executable, args) + .await + .inspect_err(|message| println!("Error running {name} {message}")) } -async fn script_output( - executable: &str, - args: &[impl AsRef], -) -> Result { +async fn script_output(executable: &str, args: &[impl AsRef]) -> Result { // Run given command and return the output given let output = Command::new(executable).args(args).output(); @@ -213,60 +196,49 @@ impl SMManager { async fn factory_reset(&self) -> bool { // Run steamos factory reset script and return true on success - match run_script("factory reset", "steamos-factory-reset-config", &[""]).await { - Ok(value) => value, - Err(_) => false, - } + run_script("factory reset", "steamos-factory-reset-config", &[""]) + .await + .unwrap_or(false) } async fn disable_wifi_power_management(&self) -> bool { // Run polkit helper script and return true on success - match run_script( + run_script( "disable wifi power management", "/usr/bin/steamos-polkit-helpers/steamos-disable-wireless-power-management", &[""], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } async fn enable_fan_control(&self, enable: bool) -> bool { // Run what steamos-polkit-helpers/jupiter-fan-control does if enable { - match run_script( + run_script( "enable fan control", "systemcltl", &["start", "jupiter-fan-control-service"], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } else { - match run_script( + run_script( "disable fan control", "systemctl", &["stop", "jupiter-fan-control.service"], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } } async fn hardware_check_support(&self) -> bool { // Run jupiter-check-support note this script does exit 1 for "Support: No" case // so no need to parse output, etc. - match run_script("check hardware support", "jupiter-check-support", &[""]).await { - Ok(value) => value, - Err(_) => false, - } + run_script("check hardware support", "jupiter-check-support", &[""]) + .await + .unwrap_or(false) } async fn read_als_calibration(&self) -> f32 { @@ -276,73 +248,61 @@ impl SMManager { &[""], ) .await; - let mut value: f32 = -1.0; match result { - Ok(as_string) => value = as_string.trim().parse().unwrap(), - Err(message) => println!("Unable to run als calibration script : {}", message), + Ok(as_string) => as_string.trim().parse().unwrap_or(-1.0), + Err(message) => { + println!("Unable to run als calibration script: {}", message); + -1.0 + } } - - value } async fn update_bios(&self) -> bool { // Update the bios as needed // Return true if the script was successful (though that might mean no update was needed), false otherwise - match run_script( + run_script( "update bios", "/usr/bin/steamos-potlkit-helpers/jupiter-biosupdate", &["--auto"], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } async fn update_dock(&self) -> bool { // Update the dock firmware as needed // Retur true if successful, false otherwise - match run_script( + run_script( "update dock firmware", "/usr/bin/steamos-polkit-helpers/jupiter-dock-updater", &[""], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } async fn trim_devices(&self) -> bool { // Run steamos-trim-devices script // return true on success, false otherwise - match run_script( + run_script( "trim devices", "/usr/bin/steamos-polkit-helpers/steamos-trim-devices", &[""], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } async fn format_sdcard(&self) -> bool { // Run steamos-format-sdcard script // return true on success, false otherwise - match run_script( + run_script( "format sdcard", "/usr/bin/steamos-polkit-helpers/steamos-format-sdcard", &[""], ) .await - { - Ok(value) => value, - Err(_) => false, - } + .unwrap_or(false) } async fn set_gpu_performance_level(&self, level: i32) -> bool { @@ -357,9 +317,8 @@ impl SMManager { // Open sysfs file let result = File::create("/sys/class/drm/card0/device/power_dpm_force_performance_level").await; - let mut myfile; - match result { - Ok(f) => myfile = f, + let mut myfile = match result { + Ok(f) => f, Err(message) => { println!("Error opening sysfs file for writing {message}"); return false; @@ -386,9 +345,8 @@ impl SMManager { } let result = File::create("/sys/class/drm/card0/device/pp_od_clk_voltage").await; - let mut myfile; - match result { - Ok(f) => myfile = f, + let mut myfile = match result { + Ok(f) => f, Err(message) => { println!("Error opening sysfs file for writing {message}"); return false; @@ -435,9 +393,8 @@ impl SMManager { } let result = File::create("/sys/class/hwmon/hwmon5/power1_cap").await; - let mut power1file; - match result { - Ok(f) => power1file = f, + let mut power1file = match result { + Ok(f) => f, Err(message) => { println!("Error opening sysfs power1_cap file for writing TDP limits {message}"); return false; @@ -445,9 +402,8 @@ impl SMManager { }; let result = File::create("/sys/class/hwmon/hwmon5/power2_cap").await; - let mut power2file; - match result { - Ok(f) => power2file = f, + let mut power2file = match result { + Ok(f) => f, Err(message) => { println!("Error opening sysfs power2_cap file for wtriting TDP limits {message}"); return false; From dce3ad84375c370ebbc63819189c9d138fcf0187 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 16:54:07 -0700 Subject: [PATCH 06/14] manager: Make match indent towers more idiomatic --- src/manager.rs | 162 +++++++++++++++++++++---------------------------- 1 file changed, 69 insertions(+), 93 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 1defe4a..3f40b13 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -356,27 +356,21 @@ impl SMManager { // write value let data = format!("s 0 {clocks}\n"); let result = myfile.write(data.as_bytes()).await; + if let Err(message) = result { + println!("Error writing to sysfs file {message}"); + return false; + } + + let data = format!("s 1 {clocks}\n"); + let result = myfile.write(data.as_bytes()).await; + if let Err(message) = result { + println!("Error writing to sysfs file {message}"); + return false; + } + + let result = myfile.write("c\n".as_bytes()).await; match result { - Ok(_worked) => { - let data = format!("s 1 {clocks}\n"); - let result = myfile.write(data.as_bytes()).await; - match result { - Ok(_worked) => { - let result = myfile.write("c\n".as_bytes()).await; - match result { - Ok(_worked) => true, - Err(message) => { - println!("Error writing to sysfs file {message}"); - false - } - } - } - Err(message) => { - println!("Error writing to sysfs file {message}"); - false - } - } - } + Ok(_worked) => true, Err(message) => { println!("Error writing to sysfs file {message}"); false @@ -460,48 +454,37 @@ impl SMManager { Ok(WifiDebugMode::Off) => { // If mode is 0 disable wifi debug mode // Stop any existing trace and flush to disk. - match stop_tracing(self.should_trace).await { - Ok(result) => { - if result { - // Stop_tracing was successful - match setup_iwd_config(false).await { - Ok(_) => { - // setup_iwd_config false worked - match restart_iwd().await { - Ok(value) => { - if value { - // restart iwd worked - self.wifi_debug_mode = WifiDebugMode::Off; - } else { - // restart_iwd failed - println!( - "restart_iwd failed somehow, check log above" - ); - return false; - } - } - Err(message) => { - println!("restart_iwd got an error {message}"); - return false; - } - } - } - Err(message) => { - println!( - "setup_iwd_config false got an error somehow {message}" - ); - return false; - } - } - } else { - println!("stop_tracing command failed somehow, bailing"); - return false; - } - } + let result = match stop_tracing(self.should_trace).await { + Ok(result) => result, Err(message) => { println!("stop_tracing command had an error {message}"); return false; } + }; + if !result { + println!("stop_tracing command failed somehow, bailing"); + return false; + } + // Stop_tracing was successful + if let Err(message) = setup_iwd_config(false).await { + println!("setup_iwd_config false got an error somehow {message}"); + return false; + } + // setup_iwd_config false worked + let value = match restart_iwd().await { + Ok(value) => value, + Err(message) => { + println!("restart_iwd got an error {message}"); + return false; + } + }; + if value { + // restart iwd worked + self.wifi_debug_mode = WifiDebugMode::Off; + } else { + // restart_iwd failed + println!("restart_iwd failed somehow, check log above"); + return false; } } Ok(WifiDebugMode::On) => { @@ -510,44 +493,37 @@ impl SMManager { return false; } - match setup_iwd_config(true).await { - Ok(_) => { - // setup_iwd_config worked - match restart_iwd().await { - Ok(value) => { - if value { - // restart_iwd worked - match start_tracing(buffer_size, self.should_trace).await { - Ok(value) => { - if value { - // start_tracing worked - self.wifi_debug_mode = WifiDebugMode::On; - } else { - // start_tracing failed - println!("start_tracing failed somehow"); - return false; - } - } - Err(message) => { - println!("start_tracing got an error {message}"); - return false; - } - } - } else { - println!("restart_iwd failed somehow"); - return false; - } - } - Err(message) => { - println!("restart_iwd got an error {message}"); - return false; - } - } - } + if let Err(message) = setup_iwd_config(true).await { + println!("setup_iwd_config true got an error somehow {message}"); + return false; + } + // setup_iwd_config worked + let value = match restart_iwd().await { + Ok(value) => value, Err(message) => { - println!("setup_iwd_config true got an error somehow {message}"); + println!("restart_iwd got an error {message}"); return false; } + }; + if !value { + println!("restart_iwd failed somehow"); + return false; + } + // restart_iwd worked + let value = match start_tracing(buffer_size, self.should_trace).await { + Ok(value) => value, + Err(message) => { + println!("start_tracing got an error {message}"); + return false; + } + }; + if value { + // start_tracing worked + self.wifi_debug_mode = WifiDebugMode::On; + } else { + // start_tracing failed + println!("start_tracing failed somehow"); + return false; } } Err(_) => { From 2599d6fb204ebc84512a14b8c2a75a621ef10673 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 17:24:48 -0700 Subject: [PATCH 07/14] manager: Move work functions outside of DBus interface This enables using more idiomatic Result and ? return instead of having to match and return false --- src/manager.rs | 203 ++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 112 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 3f40b13..47683d9 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -23,7 +23,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use anyhow::Result; +use anyhow::{Error, Result}; use std::{ffi::OsStr, fmt, fs}; use tokio::{fs::File, io::AsyncWriteExt, process::Command}; use zbus::{interface, zvariant::Fd}; @@ -186,6 +186,93 @@ async fn start_tracing(buffer_size: u32, should_trace: bool) -> Result { .await } +async fn set_gpu_performance_level(level: i32) -> Result<()> { + // Set given level to sysfs path /sys/class/drm/card0/device/power_dpm_force_performance_level + // Levels are defined below + // return true if able to write, false otherwise or if level is out of range, etc. + let levels = ["auto", "low", "high", "manual", "peak_performance"]; + if level < 0 || level >= levels.len() as i32 { + return Err(Error::msg("Invalid performance level")); + } + + // Open sysfs file + let mut myfile = File::create("/sys/class/drm/card0/device/power_dpm_force_performance_level") + .await + .inspect_err(|message| println!("Error opening sysfs file for writing {message}"))?; + + // write value + myfile + .write_all(levels[level as usize].as_bytes()) + .await + .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + Ok(()) +} + +async fn set_gpu_clocks(clocks: i32) -> Result<()> { + // Set gpu clocks to given value valid between 200 - 1600 + // Only used when Gpu Performance Level is manual, but write whenever called. + // Writes value to /sys/class/drm/card0/device/pp_od_clk_voltage + if !(200..=1600).contains(&clocks) { + return Err(Error::msg("Invalid clocks")); + } + + let mut myfile = File::create("/sys/class/drm/card0/device/pp_od_clk_voltage") + .await + .inspect_err(|message| println!("Error opening sysfs file for writing {message}"))?; + + // write value + let data = format!("s 0 {clocks}\n"); + myfile + .write(data.as_bytes()) + .await + .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + + let data = format!("s 1 {clocks}\n"); + myfile + .write(data.as_bytes()) + .await + .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + + myfile + .write("c\n".as_bytes()) + .await + .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + Ok(()) +} + +async fn set_tdp_limit(limit: i32) -> Result<()> { + // Set TDP limit given if within range (3-15) + // Returns false on error or out of range + // Writes value to /sys/class/hwmon/hwmon5/power[12]_cap + if !(3..=15).contains(&limit) { + return Err(Error::msg("Invalid limit")); + } + + let mut power1file = File::create("/sys/class/hwmon/hwmon5/power1_cap") + .await + .inspect_err(|message| { + println!("Error opening sysfs power1_cap file for writing TDP limits {message}") + })?; + + let mut power2file = File::create("/sys/class/hwmon/hwmon5/power2_cap") + .await + .inspect_err(|message| { + println!("Error opening sysfs power2_cap file for wtriting TDP limits {message}") + })?; + + // Now write the value * 1,000,000 + let data = format!("{limit}000000"); + power1file + .write(data.as_bytes()) + .await + .inspect_err(|message| println!("Error writing to power1_cap file: {message}"))?; + power2file + .write(data.as_bytes()) + .await + .inspect_err(|message| println!("Error writing to power2_cap file: {message}"))?; + Ok(()) +} + #[interface(name = "com.steampowered.SteamOSManager1")] impl SMManager { const API_VERSION: u32 = 1; @@ -306,123 +393,15 @@ impl SMManager { } async fn set_gpu_performance_level(&self, level: i32) -> bool { - // Set given level to sysfs path /sys/class/drm/card0/device/power_dpm_force_performance_level - // Levels are defined below - // return true if able to write, false otherwise or if level is out of range, etc. - let levels = ["auto", "low", "high", "manual", "peak_performance"]; - if level < 0 || level >= levels.len() as i32 { - return false; - } - - // Open sysfs file - let result = - File::create("/sys/class/drm/card0/device/power_dpm_force_performance_level").await; - let mut myfile = match result { - Ok(f) => f, - Err(message) => { - println!("Error opening sysfs file for writing {message}"); - return false; - } - }; - - // write value - let result = myfile.write_all(levels[level as usize].as_bytes()).await; - match result { - Ok(_worked) => true, - Err(message) => { - println!("Error writing to sysfs file {message}"); - false - } - } + set_gpu_performance_level(level).await.is_ok() } async fn set_gpu_clocks(&self, clocks: i32) -> bool { - // Set gpu clocks to given value valid between 200 - 1600 - // Only used when Gpu Performance Level is manual, but write whenever called. - // Writes value to /sys/class/drm/card0/device/pp_od_clk_voltage - if !(200..=1600).contains(&clocks) { - return false; - } - - let result = File::create("/sys/class/drm/card0/device/pp_od_clk_voltage").await; - let mut myfile = match result { - Ok(f) => f, - Err(message) => { - println!("Error opening sysfs file for writing {message}"); - return false; - } - }; - - // write value - let data = format!("s 0 {clocks}\n"); - let result = myfile.write(data.as_bytes()).await; - if let Err(message) = result { - println!("Error writing to sysfs file {message}"); - return false; - } - - let data = format!("s 1 {clocks}\n"); - let result = myfile.write(data.as_bytes()).await; - if let Err(message) = result { - println!("Error writing to sysfs file {message}"); - return false; - } - - let result = myfile.write("c\n".as_bytes()).await; - match result { - Ok(_worked) => true, - Err(message) => { - println!("Error writing to sysfs file {message}"); - false - } - } + set_gpu_clocks(clocks).await.is_ok() } async fn set_tdp_limit(&self, limit: i32) -> bool { - // Set TDP limit given if within range (3-15) - // Returns false on error or out of range - // Writes value to /sys/class/hwmon/hwmon5/power[12]_cap - if !(3..=15).contains(&limit) { - return false; - } - - let result = File::create("/sys/class/hwmon/hwmon5/power1_cap").await; - let mut power1file = match result { - Ok(f) => f, - Err(message) => { - println!("Error opening sysfs power1_cap file for writing TDP limits {message}"); - return false; - } - }; - - let result = File::create("/sys/class/hwmon/hwmon5/power2_cap").await; - let mut power2file = match result { - Ok(f) => f, - Err(message) => { - println!("Error opening sysfs power2_cap file for wtriting TDP limits {message}"); - return false; - } - }; - - // Now write the value * 1,000,000 - let data = format!("{limit}000000"); - let result = power1file.write(data.as_bytes()).await; - match result { - Ok(_worked) => { - let result = power2file.write(data.as_bytes()).await; - match result { - Ok(_worked) => true, - Err(message) => { - println!("Error writing to power2_cap file: {message}"); - false - } - } - } - Err(message) => { - println!("Error writing to power1_cap file: {message}"); - false - } - } + set_tdp_limit(limit).await.is_ok() } async fn get_als_integration_time_file_descriptor(&self) -> Result { From 4a4b021ea50109349b08660a864531072be72eef Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 17:40:45 -0700 Subject: [PATCH 08/14] manager: Fix typo, remove redundant comments --- src/manager.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 47683d9..98f1703 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -136,7 +136,7 @@ async fn setup_iwd_config(want_override: bool) -> std::io::Result<()> { async fn restart_iwd() -> Result { // First reload systemd since we modified the config most likely - // othorwise we wouldn't be restarting iwd. + // otherwise we wouldn't be restarting iwd. match run_script("reload systemd", "systemctl", &["daemon-reload"]).await { Ok(value) => { if value { @@ -187,7 +187,7 @@ async fn start_tracing(buffer_size: u32, should_trace: bool) -> Result { } async fn set_gpu_performance_level(level: i32) -> Result<()> { - // Set given level to sysfs path /sys/class/drm/card0/device/power_dpm_force_performance_level + // Set given GPU performance level // Levels are defined below // return true if able to write, false otherwise or if level is out of range, etc. let levels = ["auto", "low", "high", "manual", "peak_performance"]; @@ -195,12 +195,10 @@ async fn set_gpu_performance_level(level: i32) -> Result<()> { return Err(Error::msg("Invalid performance level")); } - // Open sysfs file let mut myfile = File::create("/sys/class/drm/card0/device/power_dpm_force_performance_level") .await .inspect_err(|message| println!("Error opening sysfs file for writing {message}"))?; - // write value myfile .write_all(levels[level as usize].as_bytes()) .await @@ -209,9 +207,8 @@ async fn set_gpu_performance_level(level: i32) -> Result<()> { } async fn set_gpu_clocks(clocks: i32) -> Result<()> { - // Set gpu clocks to given value valid between 200 - 1600 - // Only used when Gpu Performance Level is manual, but write whenever called. - // Writes value to /sys/class/drm/card0/device/pp_od_clk_voltage + // Set GPU clocks to given value valid between 200 - 1600 + // Only used when GPU Performance Level is manual, but write whenever called. if !(200..=1600).contains(&clocks) { return Err(Error::msg("Invalid clocks")); } @@ -220,7 +217,6 @@ async fn set_gpu_clocks(clocks: i32) -> Result<()> { .await .inspect_err(|message| println!("Error opening sysfs file for writing {message}"))?; - // write value let data = format!("s 0 {clocks}\n"); myfile .write(data.as_bytes()) @@ -243,7 +239,6 @@ async fn set_gpu_clocks(clocks: i32) -> Result<()> { async fn set_tdp_limit(limit: i32) -> Result<()> { // Set TDP limit given if within range (3-15) // Returns false on error or out of range - // Writes value to /sys/class/hwmon/hwmon5/power[12]_cap if !(3..=15).contains(&limit) { return Err(Error::msg("Invalid limit")); } @@ -406,7 +401,6 @@ impl SMManager { async fn get_als_integration_time_file_descriptor(&self) -> Result { // Get the file descriptor for the als integration time sysfs path - // /sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time // Return -1 on error let result = std::fs::File::create("/sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time"); match result { From 96efd91228db654d9a28166ede9182809720396f Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 17:53:36 -0700 Subject: [PATCH 09/14] Clean up logging --- Cargo.lock | 38 ++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 ++ src/main.rs | 3 +++ src/manager.rs | 53 +++++++++++++++++++++++++------------------------- 4 files changed, 70 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 94effc7..e8716d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -541,6 +541,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + [[package]] name = "libc" version = "0.2.153" @@ -841,6 +847,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -881,6 +896,8 @@ version = "24.3.0" dependencies = [ "anyhow", "tokio", + "tracing", + "tracing-subscriber", "zbus", ] @@ -919,6 +936,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tokio" version = "1.33.0" @@ -997,6 +1024,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + [[package]] name = "typenum" version = "1.16.0" diff --git a/Cargo.toml b/Cargo.toml index 944d17e..23646e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,6 @@ strip="symbols" [dependencies] anyhow = "1" tokio = { version = "1", features = ["fs", "process", "io-std", "rt-multi-thread", "macros"] } +tracing = { version = "0.1", default-features = false } +tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] } zbus = { version = "4", features = ["tokio"] } diff --git a/src/main.rs b/src/main.rs index 0327153..7f96bbd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,6 +24,7 @@ */ use anyhow::Result; +use tracing_subscriber; use zbus::ConnectionBuilder; pub mod manager; @@ -33,6 +34,8 @@ async fn main() -> Result<()> { // This daemon is responsible for creating a dbus api that steam client can use to do various OS // level things. It implements com.steampowered.SteamOSManager1 interface + tracing_subscriber::fmt::init(); + let manager = manager::SMManager::new()?; let _system_connection = ConnectionBuilder::system()? diff --git a/src/manager.rs b/src/manager.rs index 98f1703..16d51ae 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -26,6 +26,7 @@ use anyhow::{Error, Result}; use std::{ffi::OsStr, fmt, fs}; use tokio::{fs::File, io::AsyncWriteExt, process::Command}; +use tracing::{error, warn}; use zbus::{interface, zvariant::Fd}; #[derive(PartialEq, Debug, Copy, Clone)] @@ -105,7 +106,7 @@ async fn run_script(name: &str, executable: &str, args: &[impl AsRef]) -> // Return false on failure, but also print an error if needed script_exit_code(executable, args) .await - .inspect_err(|message| println!("Error running {name} {message}")) + .inspect_err(|message| warn!("Error running {name} {message}")) } async fn script_output(executable: &str, args: &[impl AsRef]) -> Result { @@ -144,12 +145,12 @@ async fn restart_iwd() -> Result { run_script("restart iwd", "systemctl", &["restart", "iwd"]).await } else { // reload failed - println!("restart_iwd: reload systemd failed somehow"); + error!("restart_iwd: reload systemd failed with non-zero exit code"); Ok(false) } } Err(message) => { - println!("restart_iwd: reload systemd got an error {message}"); + error!("restart_iwd: reload systemd got an error: {message}"); Err(message) } } @@ -197,12 +198,12 @@ async fn set_gpu_performance_level(level: i32) -> Result<()> { let mut myfile = File::create("/sys/class/drm/card0/device/power_dpm_force_performance_level") .await - .inspect_err(|message| println!("Error opening sysfs file for writing {message}"))?; + .inspect_err(|message| error!("Error opening sysfs file for writing: {message}"))?; myfile .write_all(levels[level as usize].as_bytes()) .await - .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + .inspect_err(|message| error!("Error writing to sysfs file: {message}"))?; Ok(()) } @@ -215,24 +216,24 @@ async fn set_gpu_clocks(clocks: i32) -> Result<()> { let mut myfile = File::create("/sys/class/drm/card0/device/pp_od_clk_voltage") .await - .inspect_err(|message| println!("Error opening sysfs file for writing {message}"))?; + .inspect_err(|message| error!("Error opening sysfs file for writing: {message}"))?; let data = format!("s 0 {clocks}\n"); myfile .write(data.as_bytes()) .await - .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + .inspect_err(|message| error!("Error writing to sysfs file: {message}"))?; let data = format!("s 1 {clocks}\n"); myfile .write(data.as_bytes()) .await - .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + .inspect_err(|message| error!("Error writing to sysfs file: {message}"))?; myfile .write("c\n".as_bytes()) .await - .inspect_err(|message| println!("Error writing to sysfs file {message}"))?; + .inspect_err(|message| error!("Error writing to sysfs file: {message}"))?; Ok(()) } @@ -246,13 +247,13 @@ async fn set_tdp_limit(limit: i32) -> Result<()> { let mut power1file = File::create("/sys/class/hwmon/hwmon5/power1_cap") .await .inspect_err(|message| { - println!("Error opening sysfs power1_cap file for writing TDP limits {message}") + error!("Error opening sysfs power1_cap file for writing TDP limits {message}") })?; let mut power2file = File::create("/sys/class/hwmon/hwmon5/power2_cap") .await .inspect_err(|message| { - println!("Error opening sysfs power2_cap file for wtriting TDP limits {message}") + error!("Error opening sysfs power2_cap file for wtriting TDP limits {message}") })?; // Now write the value * 1,000,000 @@ -260,11 +261,11 @@ async fn set_tdp_limit(limit: i32) -> Result<()> { power1file .write(data.as_bytes()) .await - .inspect_err(|message| println!("Error writing to power1_cap file: {message}"))?; + .inspect_err(|message| error!("Error writing to power1_cap file: {message}"))?; power2file .write(data.as_bytes()) .await - .inspect_err(|message| println!("Error writing to power2_cap file: {message}"))?; + .inspect_err(|message| error!("Error writing to power2_cap file: {message}"))?; Ok(()) } @@ -333,7 +334,7 @@ impl SMManager { match result { Ok(as_string) => as_string.trim().parse().unwrap_or(-1.0), Err(message) => { - println!("Unable to run als calibration script: {}", message); + error!("Unable to run als calibration script: {}", message); -1.0 } } @@ -406,7 +407,7 @@ impl SMManager { match result { Ok(f) => Ok(Fd::Owned(std::os::fd::OwnedFd::from(f))), Err(message) => { - println!("Error opening sysfs file for giving file descriptor {message}"); + error!("Error opening sysfs file for giving file descriptor: {message}"); Err(zbus::fdo::Error::IOError(message.to_string())) } } @@ -430,24 +431,24 @@ impl SMManager { let result = match stop_tracing(self.should_trace).await { Ok(result) => result, Err(message) => { - println!("stop_tracing command had an error {message}"); + error!("stop_tracing command got an error: {message}"); return false; } }; if !result { - println!("stop_tracing command failed somehow, bailing"); + error!("stop_tracing command returned non-zero"); return false; } // Stop_tracing was successful if let Err(message) = setup_iwd_config(false).await { - println!("setup_iwd_config false got an error somehow {message}"); + error!("setup_iwd_config false got an error: {message}"); return false; } // setup_iwd_config false worked let value = match restart_iwd().await { Ok(value) => value, Err(message) => { - println!("restart_iwd got an error {message}"); + error!("restart_iwd got an error: {message}"); return false; } }; @@ -456,7 +457,7 @@ impl SMManager { self.wifi_debug_mode = WifiDebugMode::Off; } else { // restart_iwd failed - println!("restart_iwd failed somehow, check log above"); + error!("restart_iwd failed, check log above"); return false; } } @@ -467,26 +468,26 @@ impl SMManager { } if let Err(message) = setup_iwd_config(true).await { - println!("setup_iwd_config true got an error somehow {message}"); + error!("setup_iwd_config true got an error: {message}"); return false; } // setup_iwd_config worked let value = match restart_iwd().await { Ok(value) => value, Err(message) => { - println!("restart_iwd got an error {message}"); + error!("restart_iwd got an error: {message}"); return false; } }; if !value { - println!("restart_iwd failed somehow"); + error!("restart_iwd failed"); return false; } // restart_iwd worked let value = match start_tracing(buffer_size, self.should_trace).await { Ok(value) => value, Err(message) => { - println!("start_tracing got an error {message}"); + error!("start_tracing got an error: {message}"); return false; } }; @@ -495,13 +496,13 @@ impl SMManager { self.wifi_debug_mode = WifiDebugMode::On; } else { // start_tracing failed - println!("start_tracing failed somehow"); + error!("start_tracing failed"); return false; } } Err(_) => { // Invalid mode requested, more coming later, but add this catch-all for now - println!("Invalid wifi debug mode {mode} requested"); + warn!("Invalid wifi debug mode {mode} requested"); return false; } } From 7e262a1d96395352c15d76477a5cb6f42f0df9c8 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 18:01:58 -0700 Subject: [PATCH 10/14] manager: Move paths to constants --- src/manager.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 16d51ae..0433484 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -86,6 +86,14 @@ const MIN_BUFFER_SIZE: u32 = 100; const BOARD_NAME_PATH: &str = "/sys/class/dmi/id/board_name"; const GALILEO_NAME: &str = "Galileo"; +const ALS_INTEGRATION_PATH: &str = "/sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time"; +const POWER1_CAP_PATH: &str = "/sys/class/hwmon/hwmon5/power1_cap"; +const POWER2_CAP_PATH: &str = "/sys/class/hwmon/hwmon5/power2_cap"; + +const GPU_PERFORMANCE_LEVEL_PATH: &str = + "/sys/class/drm/card0/device/power_dpm_force_performance_level"; +const GPU_CLOCKS_PATH: &str = "/sys/class/drm/card0/device/pp_od_clk_voltage"; + fn is_galileo() -> Result { let mut board_name = fs::read_to_string(BOARD_NAME_PATH)?; board_name = board_name.trim().to_string(); @@ -196,7 +204,7 @@ async fn set_gpu_performance_level(level: i32) -> Result<()> { return Err(Error::msg("Invalid performance level")); } - let mut myfile = File::create("/sys/class/drm/card0/device/power_dpm_force_performance_level") + let mut myfile = File::create(GPU_PERFORMANCE_LEVEL_PATH) .await .inspect_err(|message| error!("Error opening sysfs file for writing: {message}"))?; @@ -214,7 +222,7 @@ async fn set_gpu_clocks(clocks: i32) -> Result<()> { return Err(Error::msg("Invalid clocks")); } - let mut myfile = File::create("/sys/class/drm/card0/device/pp_od_clk_voltage") + let mut myfile = File::create(GPU_CLOCKS_PATH) .await .inspect_err(|message| error!("Error opening sysfs file for writing: {message}"))?; @@ -244,17 +252,13 @@ async fn set_tdp_limit(limit: i32) -> Result<()> { return Err(Error::msg("Invalid limit")); } - let mut power1file = File::create("/sys/class/hwmon/hwmon5/power1_cap") - .await - .inspect_err(|message| { - error!("Error opening sysfs power1_cap file for writing TDP limits {message}") - })?; + let mut power1file = File::create(POWER1_CAP_PATH).await.inspect_err(|message| { + error!("Error opening sysfs power1_cap file for writing TDP limits {message}") + })?; - let mut power2file = File::create("/sys/class/hwmon/hwmon5/power2_cap") - .await - .inspect_err(|message| { - error!("Error opening sysfs power2_cap file for wtriting TDP limits {message}") - })?; + let mut power2file = File::create(POWER2_CAP_PATH).await.inspect_err(|message| { + error!("Error opening sysfs power2_cap file for wtriting TDP limits {message}") + })?; // Now write the value * 1,000,000 let data = format!("{limit}000000"); @@ -403,7 +407,7 @@ impl SMManager { async fn get_als_integration_time_file_descriptor(&self) -> Result { // Get the file descriptor for the als integration time sysfs path // Return -1 on error - let result = std::fs::File::create("/sys/devices/platform/AMDI0010:00/i2c-0/i2c-PRP0001:01/iio:device0/in_illuminance_integration_time"); + let result = std::fs::File::create(ALS_INTEGRATION_PATH); match result { Ok(f) => Ok(Fd::Owned(std::os::fd::OwnedFd::from(f))), Err(message) => { From cdf4297f9f2bd716b75890613be6425bb6a29086 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 18:13:35 -0700 Subject: [PATCH 11/14] main: Wait on ctrl-c --- Cargo.toml | 2 +- src/main.rs | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 23646e1..ccb7b20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ strip="symbols" [dependencies] anyhow = "1" -tokio = { version = "1", features = ["fs", "process", "io-std", "rt-multi-thread", "macros"] } +tokio = { version = "1", features = ["fs", "io-std", "macros", "process", "rt-multi-thread", "signal"] } tracing = { version = "0.1", default-features = false } tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] } zbus = { version = "4", features = ["tokio"] } diff --git a/src/main.rs b/src/main.rs index 7f96bbd..95179d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,11 +23,12 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use anyhow::Result; +use anyhow::{Error, Result}; +use tokio::signal::unix::{signal, SignalKind}; use tracing_subscriber; use zbus::ConnectionBuilder; -pub mod manager; +mod manager; #[tokio::main] async fn main() -> Result<()> { @@ -36,6 +37,8 @@ async fn main() -> Result<()> { tracing_subscriber::fmt::init(); + let mut sigterm = signal(SignalKind::terminate())?; + let manager = manager::SMManager::new()?; let _system_connection = ConnectionBuilder::system()? @@ -44,7 +47,8 @@ async fn main() -> Result<()> { .build() .await?; - loop { - std::future::pending::<()>().await; + tokio::select! { + e = sigterm.recv() => e.ok_or(Error::msg("SIGTERM pipe broke")), + e = tokio::signal::ctrl_c() => Ok(e?), } } From f8d390d6ff81e25df400eccd114089f44164a3c8 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 19 Mar 2024 18:17:28 -0700 Subject: [PATCH 12/14] Update copyrights --- src/main.rs | 1 + src/manager.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main.rs b/src/main.rs index 95179d4..a9045c2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ /* * Copyright © 2023 Collabora Ltd. + * Copyright © 2024 Valve Software * * SPDX-License-Identifier: MIT * diff --git a/src/manager.rs b/src/manager.rs index 0433484..57c6ae7 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -1,5 +1,6 @@ /* * Copyright © 2023 Collabora Ltd. + * Copyright © 2024 Valve Software * * SPDX-License-Identifier: MIT * From 87ef532ce418ef0d799dc441912b5edc3ed642f6 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 20 Mar 2024 18:19:33 -0700 Subject: [PATCH 13/14] manager: Move std::fs operations back into tokio::fs --- src/manager.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 57c6ae7..5cc3e08 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -407,10 +407,9 @@ impl SMManager { async fn get_als_integration_time_file_descriptor(&self) -> Result { // Get the file descriptor for the als integration time sysfs path - // Return -1 on error - let result = std::fs::File::create(ALS_INTEGRATION_PATH); + let result = File::create(ALS_INTEGRATION_PATH).await; match result { - Ok(f) => Ok(Fd::Owned(std::os::fd::OwnedFd::from(f))), + Ok(f) => Ok(Fd::Owned(std::os::fd::OwnedFd::from(f.into_std().await))), Err(message) => { error!("Error opening sysfs file for giving file descriptor: {message}"); Err(zbus::fdo::Error::IOError(message.to_string())) From 6f1f1c032c7c35dd85b65c7da0ad2fd6dde414f5 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 20 Mar 2024 18:23:28 -0700 Subject: [PATCH 14/14] manager: Use anyhow::ensure --- src/manager.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/manager.rs b/src/manager.rs index 5cc3e08..4c698c3 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -24,7 +24,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use anyhow::{Error, Result}; +use anyhow::{ensure, Result}; use std::{ffi::OsStr, fmt, fs}; use tokio::{fs::File, io::AsyncWriteExt, process::Command}; use tracing::{error, warn}; @@ -201,9 +201,10 @@ async fn set_gpu_performance_level(level: i32) -> Result<()> { // Levels are defined below // return true if able to write, false otherwise or if level is out of range, etc. let levels = ["auto", "low", "high", "manual", "peak_performance"]; - if level < 0 || level >= levels.len() as i32 { - return Err(Error::msg("Invalid performance level")); - } + ensure!( + level >= 0 && level < levels.len() as i32, + "Invalid performance level" + ); let mut myfile = File::create(GPU_PERFORMANCE_LEVEL_PATH) .await @@ -219,9 +220,7 @@ async fn set_gpu_performance_level(level: i32) -> Result<()> { async fn set_gpu_clocks(clocks: i32) -> Result<()> { // Set GPU clocks to given value valid between 200 - 1600 // Only used when GPU Performance Level is manual, but write whenever called. - if !(200..=1600).contains(&clocks) { - return Err(Error::msg("Invalid clocks")); - } + ensure!((200..=1600).contains(&clocks), "Invalid clocks"); let mut myfile = File::create(GPU_CLOCKS_PATH) .await @@ -249,9 +248,7 @@ async fn set_gpu_clocks(clocks: i32) -> Result<()> { async fn set_tdp_limit(limit: i32) -> Result<()> { // Set TDP limit given if within range (3-15) // Returns false on error or out of range - if !(3..=15).contains(&limit) { - return Err(Error::msg("Invalid limit")); - } + ensure!((3..=15).contains(&limit), "Invalid limit"); let mut power1file = File::create(POWER1_CAP_PATH).await.inspect_err(|message| { error!("Error opening sysfs power1_cap file for writing TDP limits {message}")