Linux 更新
首次公开证据
打开首次公开证据查看 1 个交叉存档
来源说明
Published on GitHub in February 2024 as part of Martti Malmi's testimony in the COPA v. Wright trial
linux-0.1.6-test5 解决了 Liberty 的僵尸套接字问题。MSG_DONTWAIT 修复了根本原因,不需要终止并重启线程。套接字已经被标记为非阻塞,所以我不明白为什么会这样。也许它忘记了。我猜如果套接字失败且操作系统关闭了它,就没有东西能记住它是非阻塞的,但访问已关闭的句柄应该会立即返回错误。Windows 上没有 MSG_DONTWAIT,标记套接字为非阻塞是唯一办法,因此如果有人在 Wine 中运行 Windows 版本,就必须依靠终止线程。
现在唯一的问题是他遇到的 DB 异常。
EXCEPTION: 11DbException
Db::open: Bad file descriptor
bitcoin in ThreadMessageHandler()
EXCEPTION: 11DbException
Db::close: Bad file descriptor
bitcoin in ThreadMessageHandler()
我原以为这些是 Wine 的问题,但他在 Linux 上也同样遇到了。他试过把 datadir 移到另一块盘,没有帮助。我从没遇到过。我正在运行一个持续产生大量活动和 DB 访问的压力测试,从没遇到过。
他有 Ubuntu 64 位,而我是 32 位,所以我假定这是差异所在。你的 Linux 机器是 64 位还是 32 位?你遇到过 DB 异常吗?(也看一下 db.log。)现在 test5 已经修复了僵尸问题,你能开始在 Linux 机器上运行它吗?我们需要第三个投票,以更好地了解这里发生了什么。DB 异常没有被捕获,所以如果你遇到它,程序会停止。
顺便说,zetaboards 坚持要显示“会员编号”,所以你最好尽快注册,抢一个不错的账号编号。
英文原文
展开英文原文
linux-0.1.6-test5 solved Liberty's zombie socket problem. The MSG_DONTWAIT fixed the root cause, it's not having to terminate and restart the thread. The sockets are marked non-blocking already, so I don't understand why. Maybe it forgot. I suppose if a socket fails and the OS closes it then there's nothing left to remember it was non-blocking, but then accessing a closed handle should return immediately with an error. There's no MSG_DONTWAIT on Windows, marking the socket as nonblocking is the only way, so if anyone runs the Windows version in Wine it will have to rely on terminating the thread.
The only problem now is the DB exceptions he's getting.
EXCEPTION: 11DbException
Db::open: Bad file descriptor
bitcoin in ThreadMessageHandler()
EXCEPTION: 11DbException
Db::close: Bad file descriptor
bitcoin in ThreadMessageHandler()
I had expected those to be a Wine problem, but he's getting them on Linux just the same. He tried moving the datadir to a different drive, no help. I've never gotten them. I'm running a stress test that continuously generates a lot of activity and DB access and never got it.
He has Ubuntu 64-bit and I have 32-bit, so I'm assuming that's the difference. Is your Linux machine 64-bit or 32-bit? Have you ever had a DB exception? (see db.log also) Now that the zombie problem is fixed in test5, could you start running it on your Linux machine? We could use a 3rd vote to get a better idea of what we're dealing with here. The DB exception is uncaught, so it'll stop the program if you get it.
BTW, zetaboards insists on displaying "Member #", so you better sign up soon and grab a good account number.