Tom Lane wrote:

John A Meinel <[EMAIL PROTECTED]> writes:


Can we just replace gettimeofday() with a version that's basically:


No, because it's also used for actual time-of-day calls.  It'd be
necessary to hack executor/instrument.c in particular.





Or we modify the win32 gettimeofday call to something like:



That's what Magnus was talking about, but it's really no good because it would cause Postgres' now() function to fail to track post-boot-time changes in the system date setting. Which I think would rightly be considered a bug.

The EXPLAIN ANALYZE instrumentation code will really be happier with a
straight time-since-bootup counter; by using gettimeofday, it is
vulnerable to giving wrong answers if someone changes the date setting
while the EXPLAIN is running.  But there is (AFAIK) no such call among
the portable Unix syscalls.  It seems reasonable to me to #ifdef that
code to make use of QueryPerformanceCounter on Windows.  This does not
mean we want to alter the behavior of gettimeofday() where it's being
used to find out the time of day.

                        regards, tom lane




What if you changed the "initialized" to

if (count & 0xFF == 0) {
 count = 1;
 // get the new time of day
}
++count;

Then we would only be wrong for 256 gettimeofday calls. I agree it isn't
great, though. And probably better to just abstract (possibly just with
#ifdef) the calls for accurate timing, from the calls that actually need
the real time.

John
=:->



Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to