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.
Source: Published by Martti Malmi on GitHub in February 2024 as part of his testimony in the COPA v. Wright trial. The full correspondence archive is available at mmalmi.github.io/satoshi/.