msvcrt incompatibility in Origin 6.0 when saving documents

Olaf Leidinger leidola at newcon.de
Sat Dec 3 14:05:20 CST 2005


Hello again!

Sorry for not sending an answer but there where some exercises waiting for me ;-(

Origin doesn't work with CrossOver 5 on my machine, so the problem isn't solved for me. Still using the native dll saving works fine. 

And here is the next part of my investigation:


Now the _cipow function call again with the patch:

native:
0009:call msvcrt._cipow() ret=7f82aaf9
0009:ret  msvcrt._cipow() retval=40f00020 ret=7f82aaf9
0009:call msvcrt._ftol() ret=7f82a67a
0009:ret  msvcrt._ftol() retval=00000001 ret=7f82a67a


builtin:
0009:call msvcrt._cipow() ret=7f82aaf9
trace:msvcrt:_cipow x 10.000000 y 5.000000
trace:msvcrt:_cipow z 100000.000000 
0009:ret  msvcrt._cipow() retval=00000001 ret=7f82aaf9
0009:call ntdll._ftol() ret=7f82a67a
0009:ret  ntdll._ftol() retval=0000000000000001 ret=7f82a67a

I also found a different behaviour of the putc function. In most cases the putc's look like this one:


native:
0009:call msvcrt.putc(00000000,78037ca8) ret=7f822012
0009:call ntdll.rtlentercriticalsection(7d937a18) ret=78001075
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=78001075
0009:call ntdll.rtlleavecriticalsection(7d937a18) ret=780012b1
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=780012b1
0009:ret  msvcrt.putc() retval=00000000 ret=7f822012

builtin:
0009:call msvcrt.putc(00000000,7d724018) ret=7f822012
0009:ret  msvcrt.putc() retval=00000000 ret=7f822012

But sometimes the builtin one does a writefile:

native:
0009:call msvcrt.putc(0000000a,78037ca8) ret=7f82b869
0009:call ntdll.rtlentercriticalsection(7d937a18) ret=78001075
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=78001075
0009:call ntdll.rtlleavecriticalsection(7d937a18) ret=780012b1
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=780012b1
0009:ret  msvcrt.putc() retval=0000000a ret=7f82b869
0009:call ok60.?onbeforeprojectsave at cokaccess@@uaehg at z(<unknown, check return>) ret=7f7f35f2

builtin:
0009:call msvcrt.putc(0000000a,7d724018) ret=7f82b869
0009:call kernel32.writefile(00000018,7fe636f0,0000000e,7fadeec0,00000000) ret=7e876a07
0009:call ntdll.ntwritefile(00000018,00000000,00000000,00000000,7fadedc8,7fe636f0,0000000e,00000000,00000000) ret=7fcc4389
0009:ret  ntdll.ntwritefile() retval=00000000 ret=7fcc4389
0009:ret  kernel32.writefile() retval=00000001 ret=7e876a07
0009:ret  msvcrt.putc() retval=0000000a ret=7f82b869
0009:call ok60.?onbeforeprojectsave at cokaccess@@uaehg at z(<unknown, check return>) ret=7f7f35f2

The ftell-function also calls rtlentercriticalsection:

native:
0009:call msvcrt.ftell(78037ca8) ret=7f81f030
0009:call ntdll.rtlentercriticalsection(7d937a18) ret=78001075
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=78001075
0009:call ntdll.rtlentercriticalsection(7d920188) ret=780124b6
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=780124b6
0009:call kernel32.setfilepointer(00000018,00000000,00000000,00000001) ret=78012115
0009:call ntdll.wine_server_handle_to_fd(00000018,00000000,7fadee1c,00000000) ret=7fcc36f1

builtin:
0009:call msvcrt.ftell(7d724018) ret=7f81f030
trace:msvcrt:_lseeki64 :fd (3) handle (0x18)
trace:msvcrt:_lseeki64 :fd (3) to 300000018 pos seek_cur
0009:call kernel32.setfilepointerex(00000018,00000000,00000000,7fadee80,00000001) ret=7e8766dc
0009:call ntdll.wine_server_handle_to_fd(00000018,00000000,7fadeda4,00000000) ret=7fcc36f1


Then there is a bit stange part. It happens during a lot of putc calls...

native: (line 32599)
0009:call msvcrt.putc(00000000,78037ca8) ret=7f822012
0009:call ntdll.rtlentercriticalsection(7d937a18) ret=78001075
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=78001075
0009:call ntdll.rtlleavecriticalsection(7d937a18) ret=780012b1
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=780012b1
0009:ret  msvcrt.putc() retval=00000000 ret=7f822012
0009:call msvcrt.putc(fffffffb0009:call ntdll.rtlentercriticalsection(7e699888) ret=7e6553d2
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=7e6553d2
0009:call ntdll.rtlleavecriticalsection(7e699888) ret=7e655412
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=7e655412
,78037ca8) ret=7f822012
0009:call ntdll.rtlentercriticalsection(7d937a18) ret=78001075
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=78001075
0009:call ntdll.rtlleavecriticalsection(7d937a18) ret=780012b1
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=780012b1
0009:ret  msvcrt.putc() retval=000000fb ret=7f822012
0009:call msvcrt.putc(ffffffff0009:call ntdll.rtlentercriticalsection(7e699888) ret=7e6553d2
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=7e6553d2
0009:call ntdll.rtlleavecriticalsection(7e699888) ret=7e655412
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=7e655412
,78037ca8) ret=7f822012
0009:call ntdll.rtlentercriticalsection(7d937a18) ret=78001075
0009:ret  ntdll.rtlentercriticalsection() retval=00000000 ret=78001075
0009:call ntdll.rtlleavecriticalsection(7d937a18) ret=780012b1
0009:ret  ntdll.rtlleavecriticalsection() retval=00000000 ret=780012b1
0009:ret  msvcrt.putc() retval=000000ff ret=7f822012
0009:call msvcrt.putc(00000019,78037ca8) ret=7f822012
...

builtin: (line 32376)
0009:call msvcrt.putc(00000000,7d724018) ret=7f822012
0009:ret  msvcrt.putc() retval=00000000 ret=7f822012
0009:call msvcrt.putc(fffffffb,7d724018) ret=7f822012
0009:ret  msvcrt.putc() retval=fffffffb ret=7f822012
0009:call msvcrt.putc(ffffffff,7d724018) ret=7f822012
0009:ret  msvcrt.putc() retval=ffffffff ret=7f822012

I also get the three putc's of the builtin version but after that there are about 7000 lines of putc-calls like above and NO MORE putc calls at all in the builtin version. Also the output of the native debug output is a bit "diverted" (two calls in one line!).
Till the lines above I can't see any differences (except the ones I already reported).

Might the missing RtlEnterCriticalSection calls lead to a problem? Isn't the wine msvcrt thread-safe?


If anyone is interested in the logs, I've put them onto my webspace :

http://gordon.cip.physik.uni-saarland.de/~oleid/origin6_builtin.log.bz2
http://gordon.cip.physik.uni-saarland.de/~oleid/origin6_native.log.bz2

Thanks a lot!

Ciao,

Olaf Leidinger
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20051203/c1d01130/attachment.pgp


More information about the wine-devel mailing list