From 6b9b189d41709a8d7c33ef32b6394fdda59397f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Tue, 20 Aug 2019 19:52:54 +0800 Subject: [PATCH] recover fatal error --- pom.xml | 2 +- .../alibaba/druid/pool/DruidDataSource.java | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index e56f054f1f..a1d3f19dda 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba druid - 1.1.20_preview_05 + 1.1.20_preview_06 jar druid diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 1b361ccbc1..e8398b29ff 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -1740,6 +1740,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat sql = sql.substring(0, 1024); } + DruidAbstractDataSource dataSource = holder.getDataSource(); + boolean requireDiscard = false; final ReentrantLock lock = conn.lock; lock.lock(); @@ -1755,18 +1757,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat fatalErrorCount++; lastFatalError = error; lastFatalErrorSql = sql; - - ReentrantLock dataSourceLock = holder.getDataSource().lock; - dataSourceLock.lock(); - try { - emptySignal(); - } finally { - dataSourceLock.unlock(); - } } finally { lock.unlock(); } + if(dataSource != null) { + ReentrantLock dataSourceLock = dataSource.lock; + dataSourceLock.lock(); + try { + if (poolingCount < minIdle) { + emptySignal(); + } + } + finally { + dataSourceLock.unlock(); + } + } + if (requireDiscard) { if (holder.statementTrace != null) { holder.lock.lock();