LiteLDev / LegacyScriptEngine

A plugin engine for running LLSE plugins on LeviLamina
GNU General Public License v3.0
48 stars 8 forks source link

[Bug]: 概率性假死 #58

Closed engsr6982 closed 8 months ago

engsr6982 commented 8 months ago

Describe the bug

我在尝试Tpr查找安全坐标等待区块加载时,服务端概率性假死

具体为这几行,判断Y轴是否变动来判断是否加载区块 https://github.com/engsr6982/lse-workspace/blob/799d4f885de2b6b40f29def9b610a224d3346839/projects/LSE-TPSystem/src/tpr/TPR_Core.ts#L100-L111 区块加载后就开始获取方块对象进行查找安全方块 查找部分应该是没问题的,假死都出现在确认开始随机传送后就假死

(3.5晚上测试)

①插件在LSE编写的查找安全坐标假死过一次 ②远程调用原生插件导出的API假死过两次

To Reproduce

  1. 安装TPSystem download url(action)
  2. 安装ZoneCheckV3-windows-x64-c7daeac0a53e78c78cb17232b8813df8abbc1e6d.zip
  3. BDS/Plugins/PPOUI/LSE-TPSystem/Config.json更改Tpr.restrictedArea.Enable为false
  4. Tpr.UseZoneCheckV3API开启/关闭 可以测试1/2两种假死情况
  5. 游戏内/tps tpr执行随机传送

Expected behavior

BDS正常运行,而不是假死

Screenshots

No response

Platform

win11

BDS Version

1.20.62-2.649+ecfbe63

LeviLamina Version

LeviLamina-0.9.2+2f58b1be9

LegacyScriptEngine Version

0.4.1

Additional context

ll list
00:13:22.614 INFO [Server] 服务器有 6 个插件: legacy-script-engine-quickjs, LegacyMoney, LegacyParticleAPI, LegacyRemoteCall, ZoneCheckV3, LSE-TPSystem

ZoneCheckV3-windows-x64-c7daeac0a53e78c78cb17232b8813df8abbc1e6d.zip

ShrBox commented 8 months ago

我这里传送到未加载区块直接崩服

啥版本,方便发log和dmp吗

ShrBox commented 8 months ago

经过调试,我发现问题出在这段代码上

_a = TPARequestPool;
TPARequestPool.requests = {};
TPARequestPool.cleanup = async () => {
    try {
        const thiz = _a;
        for (const reciever in thiz.requests) {
            for (const sender in thiz.requests[reciever]) {
                const req = thiz.requests[reciever][sender];
                if (req.available != Available.Available) {
                    if (req.sender != null) {
                        req.sender.tell(AvailDescription(req.available));
                    }
                    thiz.deleteRequest(sender, reciever);
                }
            }
        }
        if (config.Tpa.CacheCheckFrequency <= 0)
            return;
        setTimeout(_a.cleanup, config.Tpa.CacheCheckFrequency);
    }
    catch (e) {
        formatAndPrintingError(e);
    }
};
TPARequestPool.cleanup();

图片

ShrBox commented 8 months ago

请问该插件在LL2是否存在假死情况?

engsr6982 commented 8 months ago

请问该插件在LL2是否存在假死情况?

LL2/LL3截止目前均没有用户反映假死问题:(

LL2自己开服的时候也未出现假死问题 假死问题我在LL3测试插件功能的时候发现的

TRDSCSH commented 8 months ago

我也多次遇到假死的情况,但没有找到具体的原因。 假死可能出现在玩家正常游玩时或者玩家进服时,毫无征兆。 假死后难以发现,发现后只能手动关闭服务端,而且没有崩溃日志,难以排查问题。

ye111566 commented 8 months ago

在隔壁一个连锁采集插件也有同样的假死问题 后台也是没任何报错

ye111566 commented 8 months ago

https://www.minebbs.com/resources/6296/

ye111566 commented 8 months ago

而且也是概率假死 我启用连锁采集挖掘的时候 有些时候连锁采集正常没假死 有些时候会假死 假死的时候,一般都是如下情况: 玩家挖掘第一个方块,连锁采集插件把挖掘拦截了,没启用连锁采集 再挖掘方块,然后服务器就假死了,这个方块客户端显示挖掉了但没掉落物,也没连锁采集启用

ShrBox commented 8 months ago

已经在 5b3e40df41f772c1f913557a84af73dd4aefad55 中修复

ShrBox commented 8 months ago

Move to https://github.com/LiteLDev/LeviLamina/issues/1483