@@ -531,7 +531,7 @@ const GLOB_EXPANSION_WARN_THRESHOLD: Duration = Duration::from_secs(5);
531531
532532pub fn handle_configure ( context : Arc < Context > , id : u32 , params : Value ) {
533533 match serde_json:: from_value :: < ConfigureOptions > ( params. clone ( ) ) {
534- Ok ( configure_options) => {
534+ Ok ( mut configure_options) => {
535535 info ! ( "Received configure request" ) ;
536536 // Start in a new thread, we can have multiple requests.
537537 thread:: spawn ( move || {
@@ -540,7 +540,7 @@ pub fn handle_configure(context: Arc<Context>, id: u32, params: Value) {
540540 // Expand glob patterns before acquiring the write lock so we
541541 // don't block readers/writers while traversing the filesystem.
542542 let workspace_directories =
543- configure_options. workspace_directories . clone ( ) . map ( |dirs| {
543+ configure_options. workspace_directories . take ( ) . map ( |dirs| {
544544 let start = Instant :: now ( ) ;
545545 let result: Vec < PathBuf > = expand_glob_patterns ( & dirs)
546546 . into_iter ( )
@@ -553,22 +553,23 @@ pub fn handle_configure(context: Arc<Context>, id: u32, params: Value) {
553553 ) ;
554554 result
555555 } ) ;
556- let environment_directories = configure_options
557- . environment_directories
558- . clone ( )
559- . map ( |dirs| {
560- let start = Instant :: now ( ) ;
561- let result: Vec < PathBuf > = expand_glob_patterns ( & dirs)
562- . into_iter ( )
563- . filter ( |p| p. is_dir ( ) )
564- . collect ( ) ;
565- trace ! (
566- "Expanded environment directory patterns ({:?}) in {:?}" ,
567- dirs,
568- start. elapsed( )
569- ) ;
570- result
571- } ) ;
556+ let environment_directories =
557+ configure_options
558+ . environment_directories
559+ . take ( )
560+ . map ( |dirs| {
561+ let start = Instant :: now ( ) ;
562+ let result: Vec < PathBuf > = expand_glob_patterns ( & dirs)
563+ . into_iter ( )
564+ . filter ( |p| p. is_dir ( ) )
565+ . collect ( ) ;
566+ trace ! (
567+ "Expanded environment directory patterns ({:?}) in {:?}" ,
568+ dirs,
569+ start. elapsed( )
570+ ) ;
571+ result
572+ } ) ;
572573 let glob_elapsed = now. elapsed ( ) ;
573574 trace ! ( "Glob expansion completed in {:?}" , glob_elapsed) ;
574575 if glob_elapsed >= GLOB_EXPANSION_WARN_THRESHOLD {
@@ -1452,6 +1453,7 @@ mod tests {
14521453 let configuration = Arc :: new ( RwLock :: new ( ConfigurationState :: default ( ) ) ) ;
14531454 let ( started_tx, started_rx) = mpsc:: channel ( ) ;
14541455 let ( release_tx, release_rx) = mpsc:: channel ( ) ;
1456+ let ( done_tx, done_rx) = mpsc:: channel ( ) ;
14551457 let locator = Arc :: new ( BlockingConfigureLocator {
14561458 started : started_tx,
14571459 release : Mutex :: new ( release_rx) ,
@@ -1479,13 +1481,15 @@ mod tests {
14791481 Some ( workspace_directories) ,
14801482 None ,
14811483 ) ;
1484+ done_tx. send ( ( ) ) . unwrap ( ) ;
14821485 } )
14831486 } ;
14841487
1485- started_rx. recv ( ) . unwrap ( ) ;
1488+ started_rx. recv_timeout ( Duration :: from_secs ( 5 ) ) . unwrap ( ) ;
14861489 assert ! ( configuration. try_read( ) . is_err( ) ) ;
14871490
14881491 release_tx. send ( ( ) ) . unwrap ( ) ;
1492+ done_rx. recv_timeout ( Duration :: from_secs ( 5 ) ) . unwrap ( ) ;
14891493 worker. join ( ) . unwrap ( ) ;
14901494
14911495 let state = configuration. read ( ) . unwrap ( ) ;
0 commit comments