File tree Expand file tree Collapse file tree 2 files changed +38
-1
lines changed Expand file tree Collapse file tree 2 files changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -1619,7 +1619,7 @@ fn add_target_crate_root(
16191619
16201620 let mut env = cargo. env ( ) . clone ( ) ;
16211621 inject_cargo_package_env ( & mut env, pkg) ;
1622- inject_cargo_env ( & mut env, & cargo_path) ;
1622+ inject_cargo_env ( & mut env, cargo_path) ;
16231623 inject_rustc_tool_env ( & mut env, cargo_crate_name, kind) ;
16241624
16251625 if let Some ( envs) = build_data. map ( |( it, _) | & it. envs ) {
Original file line number Diff line number Diff line change @@ -156,6 +156,43 @@ where
156156 }
157157}
158158
159+ impl < S > Drop for SpanMap < S > {
160+ fn drop ( & mut self ) {
161+ struct SendPtr ( * mut [ ( ) ] ) ;
162+ unsafe impl Send for SendPtr { }
163+ static SPAN_MAP_DROP_THREAD : std:: sync:: OnceLock <
164+ std:: sync:: mpsc:: Sender < ( SendPtr , fn ( SendPtr ) ) > ,
165+ > = std:: sync:: OnceLock :: new ( ) ;
166+ SPAN_MAP_DROP_THREAD
167+ . get_or_init ( || {
168+ let ( sender, receiver) = std:: sync:: mpsc:: channel :: < ( SendPtr , fn ( SendPtr ) ) > ( ) ;
169+ std:: thread:: Builder :: new ( )
170+ . name ( "SpanMapDropper" . to_owned ( ) )
171+ . spawn ( move || receiver. iter ( ) . for_each ( |( b, drop) | drop ( b) ) )
172+ . unwrap ( ) ;
173+ sender
174+ } )
175+ . send ( (
176+ unsafe {
177+ SendPtr ( std:: mem:: transmute :: < * mut [ ( TextSize , SpanData < S > ) ] , * mut [ ( ) ] > (
178+ Box :: < [ ( TextSize , SpanData < S > ) ] > :: into_raw (
179+ std:: mem:: take ( & mut self . spans ) . into_boxed_slice ( ) ,
180+ ) ,
181+ ) )
182+ } ,
183+ |b : SendPtr | {
184+ _ = unsafe {
185+ Box :: from_raw ( std:: mem:: transmute :: <
186+ * mut [ ( ) ] ,
187+ * mut [ ( TextSize , SpanData < S > ) ] ,
188+ > ( b. 0 ) )
189+ }
190+ } ,
191+ ) )
192+ . unwrap ( ) ;
193+ }
194+ }
195+
159196#[ derive( PartialEq , Eq , Hash , Debug ) ]
160197pub struct RealSpanMap {
161198 file_id : EditionedFileId ,
You can’t perform that action at this time.
0 commit comments