-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SaveDialog crash (all games that use it) on Linux #6479
Comments
If you wrap the join in an if joinable() did it help? Am I using it wrong? I dont want it to stick around. -[Unknown] |
I tried this:
after just putting it on the join failed. This also fails: Program received signal SIGSEGV, Segmentation fault. So I assume it is joinable if something is happening in that function. |
So, the point of join() is to be an unusable method to trick you into thinking you don't need a condition variable and flag to find out if the thread is done... or something? -[Unknown] |
Is this relevant? -[Unknown] |
It appears that StartIOThread() is never run. Makes sense because I just launched the game and haven't seen the dialog yet. Is it possible the initialiser isn't being run? |
Constructor sets it to 0... it's static though. Some kind of memory corruption? -[Unknown] |
int PSPSaveDialog::Init(int paramAddr)
...
printf("IOTHREAD: %p\n", ioThread);
JoinIOThread();
...
} returns: PSPSaveDialog::PSPSaveDialog()
...
, ioThread(0)
{
printf("IOTHREAD: %p\n", ioThread);
...
} returns: Edit: Updated |
Heresy. But don't you need %p in case of 64-bit? -[Unknown] |
By the way, savedata does work on Android at least. -[Unknown] |
Might have to do with Android using a custom-made thread implementation in thread.h and not relying on GCC std::thread It's also working on Symbian and Windows. Try removing the !defined(ANDROID) from native/thread/thread.h |
Replacing thread.h's contents with But, I mean, if -[Unknown] |
Strange one. I don't understand why ioThread's value is changing from nil to 0x100000001 with seemingly no code in between. I found reference to the number here: Maybe something in the JIT is writing to the wrong place. The address of ioThread was 0x15c35b8 when I ran it and base was 0x2300000000. |
Well, does it happen using interpreter? I mean, as a test, you could try adding some padding members around iothread, see if it changes the situation... -[Unknown] |
Happens with interpreter. |
Yeah, that doesn't really matter. What it means is the game used an "add" instruction, rather than "addu". The difference is that "add" trips if it rolls over (afaiu), which we don't support but probably doesn't need to be supported. -[Unknown] |
Tried rearranging code, adding new variables. It still becomes Edit: Works in debug mode Argh, clean build works! Probably just issue on my side. Sorry about that. |
Gah, I hate those sort of issues. -[Unknown] |
This only started in maybe the last 24 hours but I get a crash on launching any game that has a save dialog in Linux now.
Backtrace:
(gdb) bt
#0 0x00007ffff5789ce4 in std::thread::join() () from /usr/lib/libstdc++.so.6
#1 0x000000000060c9d8 in PSPSaveDialog::JoinIOThread() ()
#2 0x000000000060ca40 in PSPSaveDialog::Init(int) ()
#3 0x00000000005ce123 in void WrapI_U<&(sceUtilitySavedataInitStart(unsigned int))>() ()
#4 0x0000000000528d77 in CallSyscallWithoutFlags(HLEFunction const*) ()
It also gives an error before it crashes:
57:26:532 CRI FS File E[FileSys]: FileSystems/DirectoryFileSystem.cpp:492 DirectoryFileSystem::OpenFile: FAILED, 2 - access = 1
57:26:532 CRI FS File E[IO]: HLE/sceIo.cpp:1200 ERROR_ERRNO_FILE_NOT_FOUND=sceIoOpen(ms0:/PSP/SAVEDATA/NPJH50679_INST/ALL.DNS, 40004001, 000021a4) - file not found
The text was updated successfully, but these errors were encountered: