From 63da6468edbca1d8eed694fbd5a07cc1b70715d0 Mon Sep 17 00:00:00 2001 From: guptapratykshh Date: Sat, 21 Feb 2026 00:37:31 +0530 Subject: [PATCH] run process spawning and IO operations on virtual threads if available --- .../fs2/io/process/ProcessesPlatform.scala | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/io/jvm-native/src/main/scala/fs2/io/process/ProcessesPlatform.scala b/io/jvm-native/src/main/scala/fs2/io/process/ProcessesPlatform.scala index 0c9f5452bf..6fe328e397 100644 --- a/io/jvm-native/src/main/scala/fs2/io/process/ProcessesPlatform.scala +++ b/io/jvm-native/src/main/scala/fs2/io/process/ProcessesPlatform.scala @@ -36,21 +36,23 @@ private[process] trait ProcessesCompanionPlatform { def spawn(process: ProcessBuilder): Resource[F, Process[F]] = Resource .make { - F.blocking { - val builder = new lang.ProcessBuilder((process.command :: process.args).asJava) + evalOnVirtualThreadIfAvailable( + F.blocking { + val builder = new lang.ProcessBuilder((process.command :: process.args).asJava) - process.workingDirectory.foreach { path => - builder.directory(path.toNioPath.toFile) - } + process.workingDirectory.foreach { path => + builder.directory(path.toNioPath.toFile) + } - val env = builder.environment() - if (!process.inheritEnv) env.clear() - process.extraEnv.foreach { case (k, v) => - env.put(k, v) - } + val env = builder.environment() + if (!process.inheritEnv) env.clear() + process.extraEnv.foreach { case (k, v) => + env.put(k, v) + } - builder.start() - } + builder.start() + } + ) } { process => F.delay(process.isAlive()) .ifM( @@ -75,18 +77,18 @@ private[process] trait ProcessesCompanionPlatform { def stdin = writeOutputStreamCancelable( F.delay(process.getOutputStream()), - F.blocking(process.destroy()) + evalOnVirtualThreadIfAvailable(F.blocking(process.destroy())) ) def stdout = readInputStreamCancelable( F.delay(process.getInputStream()), - F.blocking(process.destroy()), + evalOnVirtualThreadIfAvailable(F.blocking(process.destroy())), 8192 ) def stderr = readInputStreamCancelable( F.delay(process.getErrorStream()), - F.blocking(process.destroy()), + evalOnVirtualThreadIfAvailable(F.blocking(process.destroy())), 8192 )