From 92f847483200a63193d55418381e685621b24e5c Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sun, 31 Mar 2019 10:17:11 +0200 Subject: wintun: add more retry loops --- tun/wintun/registryhacks_windows.go | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tun/wintun/registryhacks_windows.go (limited to 'tun/wintun/registryhacks_windows.go') diff --git a/tun/wintun/registryhacks_windows.go b/tun/wintun/registryhacks_windows.go new file mode 100644 index 0000000..62a629a --- /dev/null +++ b/tun/wintun/registryhacks_windows.go @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. + */ + +package wintun + +import ( + "golang.org/x/sys/windows/registry" + "time" +) + +const ( + numRetries = 25 + retryTimeout = 100 * time.Millisecond +) + +func registryOpenKeyRetry(k registry.Key, path string, access uint32) (key registry.Key, err error) { + for i := 0; i < numRetries; i++ { + key, err = registry.OpenKey(k, path, access) + if err == nil { + break + } + if i != numRetries - 1 { + time.Sleep(retryTimeout) + } + } + return +} + +func keyGetStringValueRetry(k registry.Key, name string) (val string, valtype uint32, err error) { + for i := 0; i < numRetries; i++ { + val, valtype, err = k.GetStringValue(name) + if err == nil { + break + } + if i != numRetries - 1 { + time.Sleep(retryTimeout) + } + } + return +} -- cgit v1.2.3