[bug] [6155] 条件系统防止同一事件递归处理
parent
52df52ed15
commit
c6d728172a
|
|
@ -86,6 +86,11 @@ namespace Framework.Condition
|
|||
/// </summary>
|
||||
private Stack<EventName> stackExEventName = new(MAX_EX_EVENT_COUNT);
|
||||
|
||||
/// <summary>
|
||||
/// 追踪正在处理的事件,防止同一事件递归重入
|
||||
/// </summary>
|
||||
private HashSet<EventName> _processingEvents = new();
|
||||
|
||||
/// <summary>
|
||||
/// 为减少GC分配
|
||||
/// </summary>
|
||||
|
|
@ -115,6 +120,7 @@ namespace Framework.Condition
|
|||
dicAllContitionInfo.Clear();
|
||||
dicConditionInfo.Clear();
|
||||
setConditionInfoPool.Clear();
|
||||
_processingEvents.Clear();
|
||||
setTempSignal.Clear();
|
||||
}
|
||||
|
||||
|
|
@ -339,6 +345,10 @@ namespace Framework.Condition
|
|||
|
||||
private void OnSignalSend(EventName signalName)
|
||||
{
|
||||
// 防止同一事件递归处理:如果该事件正在处理中,直接跳过
|
||||
if (!_processingEvents.Add(signalName))
|
||||
return;
|
||||
|
||||
stackExEventName.Push(signalName); // 防止死循环
|
||||
if (stackExEventName.Count >= MAX_EX_EVENT_COUNT)
|
||||
{
|
||||
|
|
@ -349,12 +359,14 @@ namespace Framework.Condition
|
|||
}
|
||||
DebugUtil.LogError($"条件系统递归触发超过{MAX_EX_EVENT_COUNT - 1}次,请检查逻辑:{log}");
|
||||
stackExEventName.Pop();
|
||||
_processingEvents.Remove(signalName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dicConditionInfo.TryGetValue(signalName, out Dictionary<int, ConditionInfo> dicInfo))
|
||||
{
|
||||
stackExEventName.Pop();
|
||||
_processingEvents.Remove(signalName);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -371,6 +383,7 @@ namespace Framework.Condition
|
|||
RecycleTempConditionInfos(listTemp);
|
||||
|
||||
stackExEventName.Pop();
|
||||
_processingEvents.Remove(signalName);
|
||||
}
|
||||
|
||||
private List<ConditionInfo> GetTempConditionInfos()
|
||||
|
|
|
|||
Loading…
Reference in New Issue