This may well end up moving to GitHub; I’m posting this here for the moment because I’m not yet confident that it’s an engine bug, rather than a bug in my own code, and to find out whether others have encountered something similar before. And if it does turn out to be an issue in my code, then perhaps this thread will prove useful to others.
That said:
I recently received a rather troubling bug-report regarding the demo of A Door to the Mists: the player in question reported that, (as it turned out) about four times out of five, attempting to pick up an object crashed the game!
Looking at the log-output, it seemed that the game was attempting to act on an object that had already been cleaned up. Giving it some thought, one plausible scenario that came to mind was that the game was receiving more than one “mouse-button-up” event per click.
I’m still testing this hypothesis, but there is some corroboration: the player in question reports that they’re using a mouse that’s being polled at a very high rate (500Hz, I believe)–and that switching to a different pointing-device causes the problem to go away!
Specific information:
The problem-mouse is “a decade or more old PS2 Intellimouse”, being polled at 500Hz. This is apparently being done in part via the following Linux kernel option: “(usbhid.mousepoll=2)”.
This setup has apparently not caused problems with other programs in the past.
With “a cheap wireless touchpad (USB)”, polling at 91Hz, the problem does not occur.
The X event tool apparently didn’t show “anything strange or interesting”.
The OS on which this is being run by the player is “Void Linux”.
A test with a simple program counting mouse-events didn’t evince the bug, so it’s still possible that the issue is somewhere in my code.
However, so simple was the test-program that it was likely running at a very, very high frame-rate, so it’s also possible that the bug occurs when the program’s frame-rate is lower than the polling rate of the mouse, or something like that. (On my own machine, the test-program runs at more than 2000fps.)
I’ve requested a trial with a modified version of the test-program, this one using “globalClock.setMode(ClockObject.M_limited)” followed by “globalClock.setFrameRate(50)” to artificially reduce the frame-rate, and am waiting for a response at time of writing.
Has anyone seen anything like this before? Any thoughts?