mirror of
https://github.com/golang/go
synced 2024-11-18 13:54:59 -07:00
cmd/link: call syscall.FlushFileBuffers on outbuf Unmap
In the windows version of OutBuf.munmap, call syscall.FlushFileBuffers after the call to syscall.FlushViewOfFile, on the theory that this will help flush all associated meta-data for the file the linker is writing. Updates #44817. Change-Id: Ibff7d05008a91eeed7634d2760153851e15e1c18 Reviewed-on: https://go-review.googlesource.com/c/go/+/406814 Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
db19b42ca8
commit
cfd202c701
@ -59,6 +59,18 @@ func (out *OutBuf) munmap() {
|
||||
if err != nil {
|
||||
Exitf("FlushViewOfFile failed: %v", err)
|
||||
}
|
||||
// Issue 44817: apparently the call below may be needed (according
|
||||
// to the Windows docs) in addition to the FlushViewOfFile call
|
||||
// above, " ... to flush all the dirty pages plus the metadata for
|
||||
// the file and ensure that they are physically written to disk".
|
||||
// Windows DOC links:
|
||||
//
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-flushviewoffile
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-flushfilebuffers
|
||||
err = syscall.FlushFileBuffers(syscall.Handle(out.f.Fd()))
|
||||
if err != nil {
|
||||
Exitf("FlushFileBuffers failed: %v", err)
|
||||
}
|
||||
err = syscall.UnmapViewOfFile(uintptr(unsafe.Pointer(&out.buf[0])))
|
||||
out.buf = nil
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user