From 7a83d6ed4a9fad04b08ba66990d92d27d4cc4973 Mon Sep 17 00:00:00 2001 From: Jeremiah Gowdy <130084966+jgowdy-godaddy@users.noreply.github.com> Date: Mon, 17 Feb 2025 12:07:03 -0800 Subject: [PATCH] Update memcall_windows.go Normalize the behavior of unlocking a region that is not locked which causes an error on Windows and succeeds on POSIX operating systems. --- memcall_windows.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/memcall_windows.go b/memcall_windows.go index 86eb6ab..0b3f4c3 100644 --- a/memcall_windows.go +++ b/memcall_windows.go @@ -20,7 +20,12 @@ func Lock(b []byte) error { // Unlock is a wrapper for windows.VirtualUnlock() func Unlock(b []byte) error { - if err := windows.VirtualUnlock(_getPtr(b), uintptr(len(b))); err != nil { + err := windows.VirtualUnlock(_getPtr(b), uintptr(len(b))) + if err != nil { + // Ignore ERROR_NOT_LOCKED (0x009E) to match POSIX behavior + if errno, ok := err.(windows.Errno); ok && errno == windows.ERROR_NOT_LOCKED { + return nil + } return fmt.Errorf(" could not free lock on %p [Err: %s]", _getStartPtr(b), err) }