http://bugs.winehq.org/show_bug.cgi?id=29168
--- Comment #139 from Xolotl Loki xoloki@gmail.com 2012-03-09 02:25:37 CST --- (In reply to comment #138)
Every thread reserves it then writes to it in thread_init.
Just realized that only the initial thread reserves and writes the virtual memory address.
I also realized what's different between my NtSetTimer and Carsten's patch: Carsten's ends up calling update_shared_data_time every couple of microsecs:
0045:fixme:ntdll:update_shared_data_time 129757528561624540 0045:fixme:ntdll:update_shared_data_time 129757528561624570 0045:fixme:ntdll:update_shared_data_time 129757528561624640 0045:fixme:ntdll:update_shared_data_time 129757528561624670
My NtTimer code, when set to fire every 100 nanosecs:
NtQuerySystemTime( &when ); when.QuadPart += 1;
status = NtSetTimer(handle, &when, (PTIMER_APC_ROUTINE)shared_data_timer_apc, handle, 0, 0, NULL);
only fires every 150 microsecs:
000f:fixme:ntdll:update_shared_data_time 129757541427830810 000f:fixme:ntdll:update_shared_data_time 129757541427832270 000f:fixme:ntdll:update_shared_data_time 129757541427833710 000f:fixme:ntdll:update_shared_data_time 129757541427835170
If I set it to fire every 10 microsecs it actually does better:
000f:fixme:ntdll:update_shared_data_time 129757548414991300 000f:fixme:ntdll:update_shared_data_time 129757548414992020 000f:fixme:ntdll:update_shared_data_time 129757548414992820 000f:fixme:ntdll:update_shared_data_time 129757548414993800
Next I'll try a dedicated thread which just sets the times and does a nanosleep...