On Tue, Mar 20, 2012 at 06:40:37PM -0700, Joey Yandle wrote: > Hi everybody, > > As originally discovered by Carsten Juttner, Star Wars: The Old Republic > uses the time values in KUSER_SHARED_DATA to trigger network send > buffers. wine does not currently update these values, so TOR does not > make it past an initial server handshake. > > I'm attaching my current patch which fixes this. It updates the values > every 15600000 nanoseconds as does Windows 7, and presumably all Windows > versions. The words of the timers are written in the correct order for > applications to detect clock tick. > > It uses a separate thread which does nothing else; a previous attempt at > an NtTimer based solution did not work, presumably due to irregularity > in the exact callback times. Attempts at setting thread priority were > also abandoned after many people were unable to run the code. > > The patch does not check the return code of nanosleep; I could add code > to nanosleep again for the remaining time in the case of an interrupt, > but didn't think it was necessary. I could also change it to use > clock_nanosleep, which would allow for more absolute timing. > > Please let me know what you think.
- pthread_create() is pretty much a no-go. Use Win32 apis instead (CreateThread() and WaitFor*) - The shared data structure should be modified with atomic accesses only. (Or use a criticalsection if possible.) However, I do not know if we can have additional threads at all in a Win32 process without confusing the win32 processes, or if this needs to be solved differently (APC?). Ciao, Marcus