diff options
| author | Brennan Vincent <brennan@umanwizard.com> | 2022-07-27 14:34:46 -0400 |
|---|---|---|
| committer | Brennan Vincent <brennan@umanwizard.com> | 2022-07-27 15:02:34 -0400 |
| commit | f83738e1d993d84c1607fcabdf9f41ab00f83d55 (patch) | |
| tree | 979db691839ab0cf459cdebd86b4b791a73461a2 | |
| parent | c2eebd7a50faa2578376a80ceba91bdc75d748e2 (diff) | |
| download | rust-f83738e1d993d84c1607fcabdf9f41ab00f83d55.tar.gz rust-f83738e1d993d84c1607fcabdf9f41ab00f83d55.zip | |
Use large stack on expander thread
| -rw-r--r-- | crates/proc-macro-srv/src/lib.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/proc-macro-srv/src/lib.rs b/crates/proc-macro-srv/src/lib.rs index 4b1858b8ed8..4c205b9cada 100644 --- a/crates/proc-macro-srv/src/lib.rs +++ b/crates/proc-macro-srv/src/lib.rs @@ -39,6 +39,8 @@ pub(crate) struct ProcMacroSrv { expanders: HashMap<(PathBuf, SystemTime), dylib::Expander>, } +const EXPANDER_STACK_SIZE: usize = 8 * 1024 * 1024; + impl ProcMacroSrv { pub fn expand(&mut self, task: ExpandMacro) -> Result<FlatTree, PanicMessage> { let expander = self.expander(task.lib.as_ref()).map_err(|err| { @@ -66,13 +68,18 @@ impl ProcMacroSrv { // FIXME: replace this with std's scoped threads once they stabilize // (then remove dependency on crossbeam) let result = crossbeam::scope(|s| { - let res = s + let res = match s + .builder() + .stack_size(EXPANDER_STACK_SIZE) + .name(task.macro_name.clone()) .spawn(|_| { expander .expand(&task.macro_name, ¯o_body, attributes.as_ref()) .map(|it| FlatTree::new(&it)) - }) - .join(); + }) { + Ok(handle) => handle.join(), + Err(e) => std::panic::resume_unwind(Box::new(e)), + }; match res { Ok(res) => res, |
