Name the executors and fail a block_on on the UI thread
architecture.md §7.1 stated five executors and their thread counts, and no code named them. dr_ui::executors now does: the Executor enum with each one's thread name and the count §7.1 gives with its reason, and spawn, which starts a thread named <executor>:<role> and marks it with the executor it belongs to. The counts are the stated budget, not yet a bound: a job still gets a thread of its own when it starts. run marks its own thread as the UI executor before it builds the window. net_runtime::build now returns a NetRuntime whose block_on asserts, in debug and test builds, that the caller is not that thread; everything else derefs to the tokio runtime. The login, folder-list and remote-folder workers built the same runtime by hand and now take it from net_runtime, so their block_on is guarded too. Tests: a block_on on a thread marked as the UI executor panics naming the UI thread; the same call on a worker returns; a spawned thread carries its name and executor.
This commit is contained in:
@@ -109,11 +109,7 @@ where
|
||||
// Multi-thread, for the reason the login worker records: a
|
||||
// current-thread runtime left reqwest's connection future unpolled on
|
||||
// Android, and the await never resolved.
|
||||
let rt = tokio::runtime::Builder::new_multi_thread()
|
||||
.worker_threads(1)
|
||||
.enable_io()
|
||||
.enable_time()
|
||||
.build();
|
||||
let rt = crate::net_runtime::build();
|
||||
let Ok(rt) = rt else {
|
||||
let _ = tx.send(Err("could not start the network runtime".into()));
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user