🎨 #3934【企业微信】修复会话存档 SDK 每次 API 调用后被销毁并重新初始化的问题
This commit is contained in:
@@ -392,10 +392,11 @@ public interface WxCpConfigStorage {
|
||||
|
||||
/**
|
||||
* 减少会话存档SDK的引用计数
|
||||
* 当引用计数降为0时,自动销毁SDK以释放资源
|
||||
* 当引用计数降为0且SDK已过期时,才自动销毁SDK以释放资源
|
||||
* 如果SDK尚未过期,保留SDK缓存以供后续调用复用
|
||||
*
|
||||
* @param sdk sdk id
|
||||
* @return 减少后的引用计数,如果返回0表示SDK已被销毁,如果SDK不匹配返回-1
|
||||
* @return 减少后的引用计数;SDK不匹配或引用计数已为0时返回-1
|
||||
* @deprecated 引用计数机制已废弃,由 ThreadLocal 模式替代。
|
||||
*/
|
||||
@Deprecated
|
||||
@@ -424,7 +425,8 @@ public interface WxCpConfigStorage {
|
||||
|
||||
/**
|
||||
* 减少SDK引用计数并在必要时释放(原子操作)
|
||||
* 此方法确保引用计数递减和SDK检查在同一个同步块内完成
|
||||
* 当引用计数降为0且SDK已过期时,才销毁SDK以释放资源
|
||||
* 如果SDK尚未过期,保留SDK缓存以供后续调用复用,避免频繁初始化和销毁
|
||||
*
|
||||
* @param sdk sdk id
|
||||
* @deprecated 引用计数机制已废弃,由 ThreadLocal 模式替代。
|
||||
|
||||
@@ -609,9 +609,9 @@ public class WxCpDefaultConfigImpl implements WxCpConfigStorage, Serializable {
|
||||
public synchronized int decrementMsgAuditSdkRefCount(long sdk) {
|
||||
if (this.msgAuditSdk == sdk && this.msgAuditSdkRefCount > 0) {
|
||||
int newCount = --this.msgAuditSdkRefCount;
|
||||
// 当引用计数降为0时,自动销毁SDK以释放资源
|
||||
// 再次检查SDK是否仍然是当前缓存的SDK(防止并发重新初始化)
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk) {
|
||||
// 当引用计数降为0且SDK已过期时,才销毁SDK以释放资源
|
||||
// 如果SDK尚未过期,保留SDK缓存以供后续调用复用,避免频繁初始化和销毁
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk && isMsgAuditSdkExpired()) {
|
||||
Finance.DestroySdk(sdk);
|
||||
this.msgAuditSdk = 0;
|
||||
this.msgAuditSdkExpiresTime = 0;
|
||||
@@ -646,9 +646,9 @@ public class WxCpDefaultConfigImpl implements WxCpConfigStorage, Serializable {
|
||||
public synchronized void releaseMsgAuditSdk(long sdk) {
|
||||
if (this.msgAuditSdk == sdk && this.msgAuditSdkRefCount > 0) {
|
||||
int newCount = --this.msgAuditSdkRefCount;
|
||||
// 当引用计数降为0时,自动销毁SDK以释放资源
|
||||
// 再次检查SDK是否仍然是当前缓存的SDK(防止并发重新初始化)
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk) {
|
||||
// 当引用计数降为0且SDK已过期时,才销毁SDK以释放资源
|
||||
// 如果SDK尚未过期,保留SDK缓存以供后续调用复用,避免频繁初始化和销毁
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk && isMsgAuditSdkExpired()) {
|
||||
Finance.DestroySdk(sdk);
|
||||
this.msgAuditSdk = 0;
|
||||
this.msgAuditSdkExpiresTime = 0;
|
||||
|
||||
@@ -589,9 +589,9 @@ public class WxCpRedisConfigImpl implements WxCpConfigStorage {
|
||||
public synchronized int decrementMsgAuditSdkRefCount(long sdk) {
|
||||
if (this.msgAuditSdk == sdk && this.msgAuditSdkRefCount > 0) {
|
||||
int newCount = --this.msgAuditSdkRefCount;
|
||||
// 当引用计数降为0时,自动销毁SDK以释放资源
|
||||
// 再次检查SDK是否仍然是当前缓存的SDK(防止并发重新初始化)
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk) {
|
||||
// 当引用计数降为0且SDK已过期时,才销毁SDK以释放资源
|
||||
// 如果SDK尚未过期,保留SDK缓存以供后续调用复用,避免频繁初始化和销毁
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk && isMsgAuditSdkExpired()) {
|
||||
Finance.DestroySdk(sdk);
|
||||
this.msgAuditSdk = 0;
|
||||
this.msgAuditSdkExpiresTime = 0;
|
||||
@@ -623,9 +623,9 @@ public class WxCpRedisConfigImpl implements WxCpConfigStorage {
|
||||
public synchronized void releaseMsgAuditSdk(long sdk) {
|
||||
if (this.msgAuditSdk == sdk && this.msgAuditSdkRefCount > 0) {
|
||||
int newCount = --this.msgAuditSdkRefCount;
|
||||
// 当引用计数降为0时,自动销毁SDK以释放资源
|
||||
// 再次检查SDK是否仍然是当前缓存的SDK(防止并发重新初始化)
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk) {
|
||||
// 当引用计数降为0且SDK已过期时,才销毁SDK以释放资源
|
||||
// 如果SDK尚未过期,保留SDK缓存以供后续调用复用,避免频繁初始化和销毁
|
||||
if (newCount == 0 && this.msgAuditSdk == sdk && isMsgAuditSdkExpired()) {
|
||||
Finance.DestroySdk(sdk);
|
||||
this.msgAuditSdk = 0;
|
||||
this.msgAuditSdkExpiresTime = 0;
|
||||
|
||||
Reference in New Issue
Block a user