Hello List!
I'm testing Origin 6.0 using wine-0.9.1 and everything is really fine except saving documents. I'm getting a crash here. Just before that crash there is a dialog telling me: "File not saved. Please ensure that the disk isn't full" (roughly translated). Using a native version of msvcrt everything works fine. So I suppose that the problem lies in the builtin msvcrt ;-)
Running origin60.exe using +relay, I also get the message dialog, but the app doesn't crash. (Timing problem?)
Perhaps anybody could tell me where to start looking for the problem. Going trough the +relay-logs I can't find anything suspect. But I'm not very familliar with the win32 api ;-(
Thanks a lot for your interest,
Ciao,
Olaf Leidinger
"Olaf" == Olaf Leidinger leidola@newcon.de writes:
Olaf> Hello List! I'm testing Origin 6.0 using wine-0.9.1 and Olaf> everything is really fine except saving documents. I'm getting a Olaf> crash here. Just before that crash there is a dialog telling me: Olaf> "File not saved. Please ensure that the disk isn't full" (roughly Olaf> translated). Using a native version of msvcrt everything works Olaf> fine. So I suppose that the problem lies in the builtin msvcrt ;-)
Olaf> Running origin60.exe using +relay, I also get the message dialog, Olaf> but the app doesn't crash. (Timing problem?)
Olaf> Perhaps anybody could tell me where to start looking for the Olaf> problem. Going trough the +relay-logs I can't find anything Olaf> suspect. But I'm not very familliar with the win32 api ;-(
Try running the application with the debugger and builtin msvcrt. Perhaps you get a backtrace of the crash. Otherwise try in the relay trace (builtin msvcrt, showing the messagebox but not the crash) to find where the messagebox is called. You can seach for the message text. Now work up the log and try to find why the program decides to emit the messagebox.
Hope this helps!
Hello again!
Try running the application with the debugger and builtin msvcrt. Perhaps you get a backtrace of the crash. Otherwise try in the relay trace (builtin msvcrt, showing the messagebox but not the crash) to find where the messagebox is called. You can seach for the message text. Now work up the log and try to find why the program decides to emit the messagebox.
Well, the debugger doesn't tell me anything, as the backtrace is only one line long and it doesn't contain any information. I digged a bit deeper in the relay-log. After the save-file dialog I found this:
0009:Call ntdll.RtlLeaveCriticalSection(6c300220) ret=6c2317dd 0009:Ret ntdll.RtlLeaveCriticalSection() retval=00000000 ret=6c2317dd 0009:Call msvcrt._mbscmp(7fe7c6d0 "",7d8aa353 "Saving project UNTITLED to i:\mnt\privat\Origin6\UNTITLED.opj...") ret=4c0608e6 0009:Ret msvcrt._mbscmp() retval=ffffffff ret=4c0608e6 0009:Call kernel32.GetLastError() ret=6c23429b 0009:Ret kernel32.GetLastError() retval=00000000 ret=6c23429b 0009:Call kernel32.TlsGetValue(00000003) ret=6c231018 0009:Ret kernel32.TlsGetValue() retval=7fdd4bb0 ret=6c231018 0009:Call kernel32.SetLastError(00000000) ret=6c2342b5 0009:Ret kernel32.SetLastError() retval=00000000 ret=6c2342b5 0009:Call kernel32.lstrlenA(7d8aa353 "Saving project UNTITLED to i:\mnt\privat\Origin6\UNTITLED.opj...") ret=6c2338d7 0009:Ret kernel32.lstrlenA() retval=00000040 ret=6c2338d7 0009:Call msvcrt.memcpy(7fe7c6d0,7d8aa353,00000040) ret=6c233905 0009:Ret msvcrt.memcpy() retval=7fe7c6d0 ret=6c233905 0009:Call kernel32.GetLastError() ret=6c23429b 0009:Ret kernel32.GetLastError() retval=00000000 ret=6c23429b 0009:Call kernel32.TlsGetValue(00000003) ret=6c231018 0009:Ret kernel32.TlsGetValue() retval=7fdd4bb0 ret=6c231018 0009:Call kernel32.SetLastError(00000000) ret=6c2342b5 0009:Ret kernel32.SetLastError() retval=00000000 ret=6c2342b5 0009:Call user32.CallWindowProcA(7f72ffe2,0001003e,00000401,00000100,7fe7c6d0) ret=6c2320f2
The GetLastError and SetLastError calls look a bit strange to me...
Then there is A LOT OF gui-stuff...
... some _mbsinc calls
... some putc calls
And finally ...
0009:Call msvcrt.fclose(7fe8fa90) ret=7f81ecf0 0009:Call kernel32.WriteFile(00000018,7fe60478,00000004,7fadef00,00000000) ret=7e876aa7 0009:Call ntdll.NtWriteFile(00000018,00000000,00000000,00000000,7fadee08,7fe60478,00000004,00000000,00000000) ret=7fcc4389 0009:Ret ntdll.NtWriteFile() retval=00000000 ret=7fcc4389 0009:Ret kernel32.WriteFile() retval=00000001 ret=7e876aa7 0009:Call ntdll.RtlFreeHeap(7fd80000,00000000,7fe60478) ret=7e87a5e5 0009:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7e87a5e5 0009:Call ntdll.RtlEnterCriticalSection(7e899fc8) ret=7e877bb5 0009:Ret ntdll.RtlEnterCriticalSection() retval=00000000 ret=7e877bb5 0009:Call kernel32.CloseHandle(00000018) ret=7e877bd6 0009:Call ntdll.NtClose(00000018) ret=7fceb271 0009:Ret ntdll.NtClose() retval=00000000 ret=7fceb271 0009:Ret kernel32.CloseHandle() retval=00000001 ret=7e877bd6 0009:Call ntdll.RtlEnterCriticalSection(7e899fc8) ret=7e877be7 0009:Ret ntdll.RtlEnterCriticalSection() retval=00000000 ret=7e877be7 0009:Call ntdll.RtlLeaveCriticalSection(7e899fc8) ret=7e877d1f 0009:Ret ntdll.RtlLeaveCriticalSection() retval=00000000 ret=7e877d1f 0009:Call ntdll.RtlLeaveCriticalSection(7e899fc8) ret=7e877c40 0009:Ret ntdll.RtlLeaveCriticalSection() retval=00000000 ret=7e877c40 0009:Ret msvcrt.fclose() retval=00000000 ret=7f81ecf0 0009:Call kernel32.OpenFile(7fe60252 "i:\mnt\privat\Origin6\UNTITLED.opj",7fadf040,00000200) ret=7f81ed08 0009:Call ntdll.RtlInitAnsiString(7fadecb4,7fe60252 "i:\mnt\privat\Origin6\UNTITLED.opj") ret=7fcc2d75 0009:Ret ntdll.RtlInitAnsiString() retval=00000023 ret=7fcc2d75 0009:Call ntdll.RtlAnsiStringToUnicodeString(7fffcbf8,7fadecb4,00000000) ret=7fcc2dda 0009:Ret ntdll.RtlAnsiStringToUnicodeString() retval=00000000 ret=7fcc2dda 0009:Call ntdll.RtlGetFullPathName_U(7fffcc00 L"i:\mnt\privat\Origin6\UNTITLED.opj",00000208,7fadecd8,00000000) ret=7fce6be7 0009:Ret ntdll.RtlGetFullPathName_U() retval=00000044 ret=7fce6be7 0009:Call ntdll.RtlInitUnicodeString(7fadecbc,7fadecd8 L"I:\mnt\privat\Origin6\UNTITLED.opj") ret=7fce6b4e 0009:Ret ntdll.RtlInitUnicodeString() retval=00000046 ret=7fce6b4e 0009:Call ntdll.RtlUnicodeStringToAnsiSize(7fadecbc) ret=7fce6b58 0009:Ret ntdll.RtlUnicodeStringToAnsiSize() retval=00000023 ret=7fce6b58 0009:Call ntdll.RtlUnicodeStringToAnsiString(7fadecb4,7fadecbc,00000000) ret=7fce6b81 0009:Ret ntdll.RtlUnicodeStringToAnsiString() retval=00000000 ret=7fce6b81 0009:Call ntdll.RtlInitAnsiString(7fadeca0,7fe60252 "i:\mnt\privat\Origin6\UNTITLED.opj") ret=7fcc2d75 0009:Ret ntdll.RtlInitAnsiString() retval=00000023 ret=7fcc2d75 0009:Call ntdll.RtlAnsiStringToUnicodeString(7fffcbf8,7fadeca0,00000000) ret=7fcc2dda 0009:Ret ntdll.RtlAnsiStringToUnicodeString() retval=00000000 ret=7fcc2dda 0009:Call ntdll.RtlInitAnsiString(7fadeca0,00000000) ret=7fcc2d75 0009:Ret ntdll.RtlInitAnsiString() retval=00000000 ret=7fcc2d75 0009:Call ntdll.RtlAnsiStringToUnicodeString(7fadec98,7fadeca0,00000001) ret=7fcc2dda 0009:Ret ntdll.RtlAnsiStringToUnicodeString() retval=00000000 ret=7fcc2dda 0009:Call ntdll.RtlDetermineDosPathNameType_U(7fffcc00 L"i:\mnt\privat\Origin6\UNTITLED.opj") ret=7fce8811 0009:Ret ntdll.RtlDetermineDosPathNameType_U() retval=00000002 ret=7fce8811 0009:Call ntdll.RtlDoesFileExists_U(7fffcc00 L"i:\mnt\privat\Origin6\UNTITLED.opj") ret=7fce8820 0009:Ret ntdll.RtlDoesFileExists_U() retval=00000001 ret=7fce8820 0009:Call ntdll.RtlGetFullPathName_U(7fffcc00 L"i:\mnt\privat\Origin6\UNTITLED.opj",00000208,7fadecd0,00000000) ret=7fce6be7 0009:Ret ntdll.RtlGetFullPathName_U() retval=00000044 ret=7fce6be7 0009:Call ntdll.RtlFreeHeap(7fd80000,00000000,7fdcd6a8) ret=7fccb881 0009:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7fccb881 0009:Call ntdll.RtlFreeHeap(7fd80000,00000000,00000000) ret=7fccb881 0009:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7fccb881 0009:Call ntdll.RtlInitUnicodeString(7fadeca8,7fadecd0 L"I:\mnt\privat\Origin6\UNTITLED.opj") ret=7fce6b4e 0009:Ret ntdll.RtlInitUnicodeString() retval=00000046 ret=7fce6b4e 0009:Call ntdll.RtlUnicodeStringToAnsiSize(7fadeca8) ret=7fce6b58 0009:Ret ntdll.RtlUnicodeStringToAnsiSize() retval=00000023 ret=7fce6b58 0009:Call ntdll.RtlUnicodeStringToAnsiString(7fadeca0,7fadeca8,00000000) ret=7fce6b81 0009:Ret ntdll.RtlUnicodeStringToAnsiString() retval=00000000 ret=7fce6b81 0009:Call ntdll.RtlInitAnsiString(7fadeed0,7fadf048 "I:\mnt\privat\Origin6\UNTITLED.opj") ret=7fcc2d75 0009:Ret ntdll.RtlInitAnsiString() retval=00000023 ret=7fcc2d75 0009:Call ntdll.RtlAnsiStringToUnicodeString(7fffcbf8,7fadeed0,00000000) ret=7fcc2dda 0009:Ret ntdll.RtlAnsiStringToUnicodeString() retval=00000000 ret=7fcc2dda 0009:Call ntdll.RtlDosPathNameToNtPathName_U(7fffcc00 L"I:\mnt\privat\Origin6\UNTITLED.opj",7fadeed4,00000000,00000000) ret=7fcc4e4f 0009:Ret ntdll.RtlDosPathNameToNtPathName_U() retval=00000001 ret=7fcc4e4f 0009:Call ntdll.NtDeleteFile(7fadeebc) ret=7fcc4edf 0009:Ret ntdll.NtDeleteFile() retval=00000000 ret=7fcc4edf 0009:Call ntdll.RtlFreeUnicodeString(7fadeed4) ret=7fcc4ee7 0009:Ret ntdll.RtlFreeUnicodeString() retval=00000001 ret=7fcc4ee7 0009:Ret kernel32.OpenFile() retval=00000001 ret=7f81ed08 0009:Call kernel32.TlsGetValue(00000003) ret=6c231018 0009:Ret kernel32.TlsGetValue() retval=7fdd4bb0 ret=6c231018 0009:Call kernel32.TlsGetValue(00000003) ret=6c231018 0009:Ret kernel32.TlsGetValue() retval=7fdd4bb0 ret=6c231018
I think here (at the latest) it starts building the error dialog...
0009:Call kernel32.FindResourceA(00400000,000003f1,00000006) ret=6c233a4e 0009:Call ntdll.LdrFindResource_U(00400000,7faded74,00000003,7faded90) ret=7fcf69c3 0009:Ret ntdll.LdrFindResource_U() retval=c000008b ret=7fcf69c3 0009:Call ntdll.RtlNtStatusToDosError(c000008b) ret=7fcf6968 0009:Ret ntdll.RtlNtStatusToDosError() retval=00000716 ret=7fcf6968 0009:Ret kernel32.FindResourceA() retval=00000000 ret=6c233a4e 0009:Call ntdll.RtlEnterCriticalSection(6c300178) ret=6c23178e 0009:Ret ntdll.RtlEnterCriticalSection() retval=00000000 ret=6c23178e 0009:Call kernel32.FindResourceA(7d4f0000,000003f1,00000006) ret=6c292bb9 0009:Call ntdll.LdrFindResource_U(7d4f0000,7faded74,00000003,7faded90) ret=7fcf69c3 0009:Ret ntdll.LdrFindResource_U() retval=c000008a ret=7fcf69c3 0009:Call ntdll.RtlNtStatusToDosError(c000008a) ret=7fcf6968 0009:Ret ntdll.RtlNtStatusToDosError() retval=00000715 ret=7fcf6968 0009:Ret kernel32.FindResourceA() retval=00000000 ret=6c292bb9 0009:Call kernel32.FindResourceA(10000000,000003f1,00000006) ret=6c292bb9 0009:Call ntdll.LdrFindResource_U(10000000,7faded74,00000003,7faded90) ret=7fcf69c3 0009:Ret ntdll.LdrFindResource_U() retval=c000008b ret=7fcf69c3 0009:Call ntdll.RtlNtStatusToDosError(c000008b) ret=7fcf6968 0009:Ret ntdll.RtlNtStatusToDosError() retval=00000716 ret=7fcf6968 0009:Ret kernel32.FindResourceA() retval=00000000 ret=6c292bb9 0009:Call kernel32.FindResourceA(4c000000,000003f1,00000006) ret=6c292bb9 0009:Call ntdll.LdrFindResource_U(4c000000,7faded74,00000003,7faded90) ret=7fcf69c3 0009:Ret ntdll.LdrFindResource_U() retval=c000008b ret=7fcf69c3 0009:Call ntdll.RtlNtStatusToDosError(c000008b) ret=7fcf6968 0009:Ret ntdll.RtlNtStatusToDosError() retval=00000716 ret=7fcf6968 0009:Ret kernel32.FindResourceA() retval=00000000 ret=6c292bb9 0009:Call kernel32.FindResourceA(44000000,000003f1,00000006) ret=6c292bb9 0009:Call ntdll.LdrFindResource_U(44000000,7faded74,00000003,7faded90) ret=7fcf69c3 0009:Ret ntdll.LdrFindResource_U() retval=c000008a ret=7fcf69c3 0009:Call ntdll.RtlNtStatusToDosError(c000008a) ret=7fcf6968 0009:Ret ntdll.RtlNtStatusToDosError() retval=00000715 ret=7fcf6968 0009:Ret kernel32.FindResourceA() retval=00000000 ret=6c292bb9 0009:Call kernel32.FindResourceA(7f770000,000003f1,00000006) ret=6c292bb9 0009:Call ntdll.LdrFindResource_U(7f770000,7faded74,00000003,7faded90) ret=7fcf69c3 0009:Ret ntdll.LdrFindResource_U() retval=00000000 ret=7fcf69c3 0009:Ret kernel32.FindResourceA() retval=7f98d968 ret=6c292bb9 0009:Call user32.LoadStringA(7f770000,00003f0e,7fadeebc,00000100) ret=6c292bcf 0009:Call ntdll.RtlAllocateHeap(7fd80000,00000000,00000200) ret=7f6b448f 0009:Ret ntdll.RtlAllocateHeap() retval=7fe60478 ret=7f6b448f 0009:Call kernel32.FindResourceW(7f770000,000003f1,00000006) ret=7f6b3dd5 0009:Call ntdll.LdrFindResource_U(7f770000,7fadec78,00000003,7fadec94) ret=7fcf6b33 0009:Ret ntdll.LdrFindResource_U() retval=00000000 ret=7fcf6b33 0009:Ret kernel32.FindResourceW() retval=7f98d968 ret=7f6b3dd5 0009:Call kernel32.LoadResource(7f770000,7f98d968) ret=7f6b3de4 0009:Call ntdll.LdrAccessResource(7f770000,7f98d968,7fadecd4,00000000) ret=7fcf5f94 0009:Ret ntdll.LdrAccessResource() retval=00000000 ret=7fcf5f94 0009:Ret kernel32.LoadResource() retval=7f9aea58 ret=7f6b3de4 0009:Call kernel32.LockResource(7f9aea58) ret=7f6b3df2 0009:Ret kernel32.LockResource() retval=7f9aea58 ret=7f6b3df2 0009:Call kernel32.WideCharToMultiByte(00000000,00000000,7fe60478 L"Achtung !",00000009,7fadeebc,000000ff,00000000,00000000) ret=7f6b4557
"Achtung !" is the caption of the dialog.
It seems as if the file is written normally, but in fact no file is created (or it is deleted again). But I can't say what's wrong...
Ciao,
Olaf Leidinger
"Olaf" == Olaf Leidinger leidola@newcon.de writes:
Olaf> Hello again! >> Try running the application with the debugger and builtin >> msvcrt. Perhaps you get a backtrace of the crash. Otherwise try in >> the relay trace (builtin msvcrt, showing the messagebox but not the >> crash) to find where the messagebox is called. You can seach for the >> message text. Now work up the log and try to find why the program >> decides to emit the messagebox. >>
Olaf> Well, the debugger doesn't tell me anything, as the backtrace is Olaf> only one line long and it doesn't contain any information. I Olaf> digged a bit deeper in the relay-log. After the save-file dialog I Olaf> found this:
If it is a heap overwrote, try running with WINEDEBUG=+heap. This will check the heap with each heap operation and will immediately tell you when something hag gone wrong (but not where).
Otherwise perhaps try running with WINEDEBUG=+snoop,+relay and compare each msvcrt call.
Bye
On Tue, 29 Nov 2005 02:43:39 +0100, you wrote:
... some _mbsinc calls
... some putc calls
And finally ...
0009:Call msvcrt.fclose(7fe8fa90) ret=7f81ecf0
[snip]
0009:Ret msvcrt.fclose() retval=00000000 ret=7f81ecf0 0009:Call kernel32.OpenFile(7fe60252 "i:\mnt\privat\Origin6\UNTITLED.opj",7fadf040,00000200) ret=7f81ed08
This open file is really doing a delete (0x200 is OF_DELETE ). I guess that is part of the error exit and that the cause is in those putc and _mbsinc calls.
Rein.
Hello,
Olaf Leidinger wrote:
I'm testing Origin 6.0 using wine-0.9.1 and everything is really fine except saving documents. I'm getting a crash here. Just before that crash there is a dialog telling me: "File not saved. Please ensure that the disk isn't full" (roughly translated). Using a native version of msvcrt everything works fine. So I suppose that the problem lies in the builtin msvcrt ;-) Running origin60.exe using +relay, I also get the message dialog, but the app doesn't crash. (Timing problem?) Perhaps anybody could tell me where to start looking for the problem. Going trough the +relay-logs I can't find anything suspect. But I'm not very familliar with the win32 api ;-(
Just for information: Using CrossOver Office (at least since their nightlies of approx. 2005-06-28) it works. There is something strange: If I install using CrossOverOffice and point Wine 0.9.1 that installation (ln -s ../.cxoffice/default/* ~/.wine) then I can save using Wine 0.9.1.
That means that either the installation needs a feature CXO provides or some files on the harddisc have the needed feature (I'm currently not sure whether DCOM needs to be installed, I think it is not.)
Tobias
Hello,
Olaf Leidinger wrote:
I'm testing Origin 6.0 using wine-0.9.1 and everything is really fine except saving documents. I'm getting a crash here. Just before that crash there is a dialog telling me: "File not saved. Please ensure that the disk isn't full" (roughly translated). Using a native version of msvcrt everything works fine. So I suppose that the problem lies in the builtin msvcrt ;-) Running origin60.exe using +relay, I also get the message dialog, but the app doesn't crash. (Timing problem?) Perhaps anybody could tell me where to start looking for the problem. Going trough the +relay-logs I can't find anything suspect. But I'm not very familliar with the win32 api ;-(
Just for information: Using CrossOver Office (at least since their nightlies of approx. 2005-06-28) it works. There is something strange: If I install using CrossOverOffice and point Wine 0.9.1 to CXO's directory (ln -s ../.cxoffice/default/* ~/.wine) then I can save files in Origin 6 under Wine 0.9.1.
That means that either the installation needs a feature CXO provides or some files on the harddisc have the needed feature (I'm currently not sure whether DCOM needs to be installed, I think it is not.)
Tobias
PS: See also bug 3115 ( http://bugs.winehq.org/show_bug.cgi?id=3115 ), which does not provide more infomation.