[fix] 外部调用者可能需要直接使用内部申请的OwnerPacket,所以这里不释放

This commit is contained in:
智能大石头 2025-03-11 13:22:08 +08:00
parent 924229899c
commit 40f7560753
3 changed files with 23 additions and 18 deletions

View File

@ -1,5 +1,4 @@
using System.Net.Sockets; using NewLife.Log;
using NewLife.Log;
using NewLife.Net; using NewLife.Net;
using NewLife.Threading; using NewLife.Threading;
@ -13,7 +12,7 @@ public class RedisReplication : RedisBase, IRedisCluster, IDisposable
IList<IRedisNode> IRedisCluster.Nodes => Nodes.Select(x => (IRedisNode)x).ToList(); IList<IRedisNode> IRedisCluster.Nodes => Nodes.Select(x => (IRedisNode)x).ToList();
/// <summary>节点改变事件</summary> /// <summary>节点改变事件</summary>
public event EventHandler NodeChanged; public event EventHandler? NodeChanged;
/// <summary>集群节点</summary> /// <summary>集群节点</summary>
public RedisNode[]? Nodes { get; protected set; } public RedisNode[]? Nodes { get; protected set; }

View File

@ -1,6 +1,5 @@
using System.Buffers; using System.Buffers;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Net.Security; using System.Net.Security;
using System.Net.Sockets; using System.Net.Sockets;
using System.Security.Authentication; using System.Security.Authentication;
@ -690,8 +689,9 @@ public class RedisClient : DisposeBase
if (rs is TResult rs2) return rs2; if (rs is TResult rs2) return rs2;
if (TryChangeType(rs, typeof(TResult), out var target)) if (TryChangeType(rs, typeof(TResult), out var target))
{ {
// 释放内部申请的OwnerPacket //!!! 外部调用者可能需要直接使用内部申请的OwnerPacket所以这里不释放
rs.TryDispose(); //// 释放内部申请的OwnerPacket
//rs.TryDispose();
return (TResult?)target; return (TResult?)target;
} }
@ -727,8 +727,9 @@ public class RedisClient : DisposeBase
if (rs == null) return false; if (rs == null) return false;
if (TryChangeType(rs, typeof(TResult), out var target)) if (TryChangeType(rs, typeof(TResult), out var target))
{ {
// 释放内部申请的OwnerPacket //!!! 外部调用者可能需要直接使用内部申请的OwnerPacket所以这里不释放
rs.TryDispose(); //// 释放内部申请的OwnerPacket
//rs.TryDispose();
value = (TResult?)target; value = (TResult?)target;
return true; return true;
} }
@ -788,8 +789,9 @@ public class RedisClient : DisposeBase
if (rs is TResult rs2) return rs2; if (rs is TResult rs2) return rs2;
if (TryChangeType(rs, typeof(TResult), out var target)) if (TryChangeType(rs, typeof(TResult), out var target))
{ {
// 释放内部申请的OwnerPacket //!!! 外部调用者可能需要直接使用内部申请的OwnerPacket所以这里不释放
rs.TryDispose(); //// 释放内部申请的OwnerPacket
//rs.TryDispose();
return (TResult?)target; return (TResult?)target;
} }
@ -939,8 +941,9 @@ public class RedisClient : DisposeBase
var rs = list[i]; var rs = list[i];
if (rs != null && TryChangeType(rs, ps[i].Type, out var target) && target != null) if (rs != null && TryChangeType(rs, ps[i].Type, out var target) && target != null)
{ {
// 释放内部申请的OwnerPacket //!!! 外部调用者可能需要直接使用内部申请的OwnerPacket所以这里不释放
rs.TryDispose(); //// 释放内部申请的OwnerPacket
//rs.TryDispose();
list[i] = target; list[i] = target;
} }
} }

View File

@ -1,9 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Runtime.Intrinsics.Arm;
using NewLife.Caching; using NewLife.Caching;
using NewLife.Log; using NewLife.Log;
using Xunit; using Xunit;
@ -105,14 +102,20 @@ public class HashTest
var hash = _redis.GetDictionary<EventInfo>(key); var hash = _redis.GetDictionary<EventInfo>(key);
Assert.NotNull(hash); Assert.NotNull(hash);
var l = hash as RedisHash<String, String>; var rh = hash as RedisHash<String, EventInfo>;
foreach(var item in l.GetAll()) foreach (var item in rh.GetAll())
{ {
XTrace.WriteLine(item.Key); XTrace.WriteLine(item.Key);
} }
l["0"] = "0"; rh["0"] = new EventInfo { EventId = "1234", EventName = "Stone" };
}
class EventInfo
{
public String? EventId { get; set; }
public String? EventName { get; set; }
} }
} }