diff --git a/pom.xml b/pom.xml
index fad61772..63a4d933 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.zx.sms
cmpp-core
- 1.21
+ 1.22
jar
cmpp-core
diff --git a/src/main/java/com/zx/sms/session/cmpp/SessionStateManager.java b/src/main/java/com/zx/sms/session/cmpp/SessionStateManager.java
index e5bf7616..5f52420b 100644
--- a/src/main/java/com/zx/sms/session/cmpp/SessionStateManager.java
+++ b/src/main/java/com/zx/sms/session/cmpp/SessionStateManager.java
@@ -229,6 +229,7 @@ private void scheduleRetryMsg(final ChannelHandlerContext ctx, final Message mes
*TODO bugfix:
*不知道什么原因,会导致 下面的future任务没有cancel掉。
*这里增加一个引用,当会试任务超过次数限制后,cancel掉自己。
+ *些任务不能被中断interupted.如果storeMap.remove()被中断会破坏BDB的内部状态,使用BDB无法继续工作
**/
final AtomicReference ref = new AtomicReference();
@@ -244,7 +245,7 @@ public void run() {
//会有future泄漏的情况发生,这里cancel掉自己,来规避泄漏
Future future = ref.get();
if(future!=null)
- future.cancel(true);
+ future.cancel(false);
cancelRetry(message, ctx.channel());
@@ -267,6 +268,7 @@ public void run() {
ctx.writeAndFlush(message, ctx.newPromise());
}
} catch (Throwable e) {
+ logger.error("retry Send Msg Error: {}", message);
logger.error("retry send Msg Error.", e);
}
}
@@ -278,7 +280,7 @@ public void run() {
// 这里增加一次判断,是否已收到resp消息,已到resp后,msgRetryMap里的entry会被 remove掉。
if (msgRetryMap.get(seq) == null) {
- future.cancel(true);
+ future.cancel(false);
}
} else if (entry == null) {
@@ -292,7 +294,7 @@ private Entry cancelRetry(Message msg, Channel channel) {
Entry entry = msgRetryMap.remove(msg.getHeader().getSequenceId());
if (entry != null && entry.future != null) {
- entry.future.cancel(true);
+ entry.future.cancel(false);
}
if (windows != null) {
// 如果等窗口的队列里有任务,先发送等待的消息