clarified signature: proper scope of synchronized operation;
authorwenzelm
Mon, 13 Feb 2023 11:53:35 +0100
changeset 77290 12fd873af77c
parent 77289 c7d893278aec
child 77291 f7e413e8d269
clarified signature: proper scope of synchronized operation;
src/Pure/Tools/build_process.scala
--- a/src/Pure/Tools/build_process.scala	Mon Feb 13 11:35:46 2023 +0100
+++ b/src/Pure/Tools/build_process.scala	Mon Feb 13 11:53:35 2023 +0100
@@ -185,8 +185,9 @@
       .nextOption()
   }
 
-  private def used_node(i: Int): Boolean = synchronized {
-    _running.valuesIterator.exists(job => job.numa_node.isDefined && job.numa_node.get == i)
+  private def next_numa_node(): Option[Int] = synchronized {
+    _numa_nodes.next(used =
+      Set.from(for { job <- _running.valuesIterator; i <- job.numa_node } yield i))
   }
 
   private def session_finished(session_name: String, process_result: Process_Result): String =
@@ -317,7 +318,7 @@
           command_timings = build_context(session_name).old_command_timings)
 
       synchronized {
-        val numa_node = _numa_nodes.next(used_node)
+        val numa_node = next_numa_node()
         val job =
           new Build_Job(progress, session_background, store, do_store,
             resources, session_setup, input_heaps, numa_node)