PuTTY semi-bug ntpd-slowdown

Home | FAQ | Feedback | Licence | Updates | Mirrors | Keys | Links | Team
Download: Stable · Snapshot | Docs | Changes | Wishlist

summary: PuTTY causes ntpd to lose time
class: semi-bug: This might or might not be a bug, depending on your precise definition of what a bug is.
difficulty: taxing: Needs external things we don't have (standards, users etc)
priority: medium: This should be fixed one day.
present-in: 0.53b
fixed-in: 2004-03-18 c4bfa9b7b77f719a61de6049c9c18d80c9685c9b (0.55)

It's been reported that running an SSH-2 session through PuTTY causes ntpd to lose time in 10ms steps, as if 100Hz interrupts are being lost. The same problem doesn't affect Telnet connections, though. Ref <C5EA7C1F01A7D311A44700508B95196C0730D8AB@004-h00028.wugo.intranet.wegener.nl> et seq., which mentions the platform as

PC DELL Latitude 610 with w2k pro Dutch with SP3 on AC Power.

As far as I can tell, noise_ultralight() and noise_regular() are called even during a Telnet session (they're stubs in PuTTYtel, but in PuTTY they go out and hunt for noise even if no-one's ever going to consume it). noise_get_heavy() is only called at the start of an SSH session, so it shouldn't cause continuing problems, especially not ones that go away when the session ends.

I think this narrows us down to noise_get_light(), which is called every time the random pool is used, which looks like being most packets in an SSH session, but never in a Telnet session. noise_get_light() calls GetSystemTime(), GetSystemTimeAdjustment() and GetSystemPowerStatus().

By use of diagnostic builds we've narrowed the problem down to use of GetSystemPowerStatus(), which is likely to be calling the APM BIOS, which ISTR has to be done with interrupts disabled.

Update, 2004-03-18: the GetSystemPowerStatus() call has been removed in an attempt to fix `hard-hangs'. With luck, that should make this problem go away too.


If you want to comment on this web site, see the Feedback page.
Audit trail for this semi-bug.
(last revision of this bug record was at 2016-12-27 11:40:22 +0000)