{"record":{"id":"fa7662b9df6fce20","repo":"zed-industries/zed","slug":"failed-to-spawn-threaded-dispatcher-worker","errorCode":null,"errorMessage":"failed to spawn threaded dispatcher worker","messagePattern":"failed to spawn threaded dispatcher worker","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/gpui/src/platform/threaded_dispatcher.rs","lineNumber":147,"sourceCode":"\n        let thread_count =\n            thread::available_parallelism().map_or(MIN_THREADS, |i| i.get().max(MIN_THREADS));\n        for i in 0..thread_count {\n            let mut receiver: PriorityQueueReceiver<RunnableVariant> = background_receiver.clone();\n            let idle = idle.clone();\n            thread::Builder::new()\n                .name(format!(\"ThreadedDispatcherWorker-{i}\"))\n                .spawn(move || {\n                    while let Ok(runnable) = receiver.pop() {\n                        let _decrement = idle.decrement_on_drop();\n                        let location = runnable.metadata().location;\n                        let spawned = runnable.metadata().spawned;\n                        profiler::update_running_task(spawned, location);\n                        runnable.run();\n                        profiler::save_task_timing();\n                    }\n                })\n                .expect(\"failed to spawn threaded dispatcher worker\");\n        }\n        drop(background_receiver);\n\n        let timers = Arc::new(TimerQueue {\n            state: Mutex::new(TimerQueueState {\n                heap: BinaryHeap::new(),\n                next_seq: 0,\n            }),\n            condvar: Condvar::new(),\n        });\n        {\n            let timers = timers.clone();\n            let idle = idle.clone();\n            thread::Builder::new()\n                .name(\"ThreadedDispatcherTimer\".to_owned())\n                .spawn(move || {\n                    let mut state = timers.state.lock();\n                    loop {","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/gpui/src/platform/threaded_dispatcher.rs#L129-L165","documentation":"ThreadedDispatcher::new spawns one worker thread per available parallelism; if thread::Builder::spawn returns Err (OS refused thread creation — resource limits, thread count exhausted), the unwrap panics because the dispatcher cannot function without its worker pool.","triggerScenarios":"Thrown at crates/gpui/src/platform/threaded_dispatcher.rs:147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check ulimit -u / cgroup thread limits (RLIMIT_NPROC, TasksMax) and raise them","Free system resources or reduce concurrent thread consumption at startup","Consider degrading to fewer worker threads instead of failing hard"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}