$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [interprocess] Getting boot-up time is unreliable on Windows
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2016-12-30 16:31:11
On 22/12/2016 10:01, Thomas Dahms wrote:
> Dear developers, dear Ion,
>
> We are experiencing issues on Windows where boost::interprocess relies
> on a certain event in the system event log to get the system's boot-up
> time. This has proven to be unreliable, because that event is not always
> present in the log. In that case, initialization of boost::interprocess
> fails.
> Several bug reports exist for that issue, e.g. [1, 2].
>
> Report [1] contains a proposed fix to use GetTickCount64() and there is
> an open PR with an alternative fix to fall back to WMI mechanisms [3]. I
> understand that the fix [1] would need some polishing, because
> GetTickCount64() is not available in pre-Vista.
>
> Nevertheless, both proposed fixes have been uncommented and unconsidered
> for a while now. Is there any chance that the maintainers could look
> into this?
Thanks for the ping. I don't think GetTickCount64 is very reliable, as
other methods also have problems with time correction, hibernation, fast
bootup, etc.
In [1] one the last bootup log is lost new processes won't be able to
communicate with others. The same happens with [3]
there are some instructions to give up on kernel persistence and define
the directory at compile time or run-time. This is the best workaround
so far.
I've trying to find a solution with no luck. I tried:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory
Management\PrefetchParameters\BootId
in modern Windows systems but hybrid shutdown (default since Windows 8)
does not seem to update it as kernel is suspended. Searching for a
unique bootup id in windows that does not suffer when hibernating or
correcting the RTC is really complicated.
Any suggestion welcomed. Best,
Ion