diff options
| author | 2023-04-28 01:36:44 +0800 | |
|---|---|---|
| committer | 2023-04-28 01:36:44 +0800 | |
| commit | dd84b9d64fb98746a230cd24233ff50a562c39c9 (patch) | |
| tree | b583261ef00b3afe72ec4d6dacb31e57779a6faf /cli/internal/chrometracing/chrometracing_close.go | |
| parent | 0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff) | |
| download | HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip | |
Diffstat (limited to 'cli/internal/chrometracing/chrometracing_close.go')
| -rw-r--r-- | cli/internal/chrometracing/chrometracing_close.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/cli/internal/chrometracing/chrometracing_close.go b/cli/internal/chrometracing/chrometracing_close.go new file mode 100644 index 0000000..1b3a7b9 --- /dev/null +++ b/cli/internal/chrometracing/chrometracing_close.go @@ -0,0 +1,26 @@ +package chrometracing + +// Close overwrites the trailing (,\n) with (]\n) and closes the trace file. +// Close is implemented in a separate file to keep a separation between custom +// code and upstream from github.com/google/chrometracing. Additionally, we can +// enable linting for code we author, while leaving upstream code alone. +func Close() error { + trace.fileMu.Lock() + defer trace.fileMu.Unlock() + // Seek backwards two bytes (,\n) + if _, err := trace.file.Seek(-2, 1); err != nil { + return err + } + // Write 1 byte, ']', leaving the trailing '\n' in place + if _, err := trace.file.Write([]byte{']'}); err != nil { + return err + } + // Force the filesystem to write to disk + if err := trace.file.Sync(); err != nil { + return err + } + if err := trace.file.Close(); err != nil { + return err + } + return nil +} |
