Message-ID: From: "mschorsch (@mschorsch)" To: "pgjdbc/pgjdbc" Date: Tue, 30 Sep 2025 14:58:13 +0000 Subject: [pgjdbc/pgjdbc] issue #3835: Virtual Thread pinned in PostgreSQL JDBC Driver 42.7.8 List-Id: X-GitHub-Author-Id: 4418363 X-GitHub-Author-Login: mschorsch X-GitHub-Issue: 3835 X-GitHub-Repo: pgjdbc/pgjdbc X-GitHub-State: open X-GitHub-Type: issue X-GitHub-Url: https://github.com/pgjdbc/pgjdbc/issues/3835 Content-Type: text/plain; charset=utf-8 Thread pinning occurs in the Postgres JDBC driver and has been occurring since version [42.7.8](https://github.com/pgjdbc/pgjdbc/releases/tag/REL42.7.8); previous versions were fine. We suspect that this change is causing the problem: https://github.com/pgjdbc/pgjdbc/pull/3703 ``` VirtualThread[#81,quarkus-virtual-thread-14]/runnable@ForkJoinPool-1-worker-3 reason:MONITOR java.base/java.lang.VirtualThread$VThreadContinuation.onPinned(VirtualThread.java:199) java.base/jdk.internal.vm.Continuation.onPinned0(Continuation.java:393) java.base/java.lang.VirtualThread.park(VirtualThread.java:596) java.base/java.lang.System$2.parkVirtualThread(System.java:2643) java.base/jdk.internal.misc.VirtualThreads.park(VirtualThreads.java:54) java.base/java.util.concurrent.locks.LockSupport.park(LockSupport.java:219) java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:754) java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:990) java.base/java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:153) java.base/java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:322) org.postgresql.jdbc.ResourceLock.obtain(ResourceLock.java:28) org.postgresql.core.QueryExecutorBase.getStandardConformingStrings(QueryExecutorBase.java:302) org.postgresql.core.CachedQueryCreateAction.create(CachedQueryCreateAction.java:43) org.postgresql.core.CachedQueryCreateAction.create(CachedQueryCreateAction.java:19) org.postgresql.util.LruCache.borrow(LruCache.java:130) <== monitors:1 org.postgresql.core.QueryExecutorBase.borrowQuery(QueryExecutorBase.java:335) org.postgresql.jdbc.PgConnection.borrowQuery(PgConnection.java:228) org.postgresql.jdbc.PgPreparedStatement.(PgPreparedStatement.java:93) org.postgresql.jdbc.PgConnection.prepareStatement(PgConnection.java:1426) org.postgresql.jdbc.PgConnection.prepareStatement(PgConnection.java:1878) org.postgresql.jdbc.PgConnection.prepareStatement(PgConnection.java:541) io.agroal.pool.wrapper.ConnectionWrapper.prepareStatement(ConnectionWrapper.java:649) org.jooq.impl.ProviderEnabledConnection.prepareStatement(ProviderEnabledConnection.java:109) org.jooq.impl.SettingsEnabledConnection.prepareStatement(SettingsEnabledConnection.java:91) org.jooq.impl.AbstractResultQuery.prepare(AbstractResultQuery.java:189) org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:316) org.jooq.impl.AbstractResultQuery.fetch(AbstractResultQuery.java:263) org.jooq.impl.SelectImpl.fetch(SelectImpl.java:3217) com.example.database.client.DSLContextExtensionsKt$fetchAwait$2.invokeSuspend(DSLContextExtensions.kt:39) kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34) kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) io.quarkus.virtual.threads.ContextPreservingExecutorService$ContextPreservingRunnable.run(ContextPreservingExecutorService.java:50) java.base/java.util.concurrent.ThreadPerTaskExecutor$TaskRunner.run(ThreadPerTaskExecutor.java:314) java.base/java.lang.VirtualThread.run(VirtualThread.java:329) ``` see also https://github.com/quarkusio/quarkus/issues/50345