[ruby-core:84107] [Ruby trunk Feature#13726] PATCH: Windows builds - fractional second file times

From: kubo@...
Date: 2017-12-06 10:01:32 UTC
List: ruby-core #84107
Issue #13726 has been updated by kubo (Takehiro Kubo).


@usa Thanks for merging the patches.

I'm afraid that `File.mtime(filename).usec` returns always zero just after ruby.exe starts up on Windows 8 or later.

`have_precisetime` is -1 at process startup.
https://github.com/ruby/ruby/blob/5a8a270/win32/win32.c#L4574

It is changed to zero or one in `get_systemtime()`.
https://github.com/ruby/ruby/blob/5a8a270/win32/win32.c#L4586-L4589

If File.mtime is called before `get_systemime()`, the fractional second is always zero even on Windows 8 or later.
https://github.com/ruby/ruby/blob/5a8a270/win32/win32.c#L5493

I cannot check it by myself because I failed to compile ruby from SVN source.
Could somebody check it?

----------------------------------------
Feature #13726: PATCH: Windows builds - fractional second file times
https://bugs.ruby-lang.org/issues/13726#change-68205

* Author: MSP-Greg (Greg L)
* Status: Closed
* Priority: Normal
* Assignee: usa (Usaku NAKAMURA)
* Target version: 
----------------------------------------
At present, I believe Windows builds have integer seconds resolution on File times.

Attached are three patches that seem to correct the issue. The numbered patches are best applied in order.

The c source patches were created by kubo (Kubo Takehiro); I created the spec patch, along with some testing.

All related tests (run parallel) pass on my system for MinGW builds and x64-mswin64_140 builds.  I did some checks with Appveyor, and there may be issues with the logger tests, due to the fact that the tests are very time sensitive (I ran -j3 on a quad system, Appveyor runs -j2 on a dual core).

I believe file time values are stored with 100 ns resolution, but times have 100 袖s resolution.  This was the reason for some of the changes to the tests, as time appears to be truncated (floor), as opposed to round.

I would appreciate if consideration could be given to adding this (or similar) code.  Thank you.

---Files--------------------------------
02-file-utime.patch (5.53 KB)
spec-rubyspec-core-file-time.patch (2.99 KB)
01-time-subsec.patch (15.2 KB)
spec-rubyspec-core-file-time.patch (3.28 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next