X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=adapter%2Fstatsclient%2Fstatseg.go;h=42ab3de6112f770356b944eb2eee058c3528cc49;hb=db87efa2ec1e91e81517236b164b279e57b8daa8;hp=7f1c3819dd8618b25a614f1280fc006759e1c765;hpb=9f27eeff53ee501b8641595baa7cbc2f0014a68c;p=govpp.git diff --git a/adapter/statsclient/statseg.go b/adapter/statsclient/statseg.go index 7f1c381..42ab3de 100644 --- a/adapter/statsclient/statseg.go +++ b/adapter/statsclient/statseg.go @@ -19,12 +19,16 @@ type sharedHeaderBase struct { statsOffset int64 } -type statSegSharedHeader struct { +type sharedHeaderV0 struct { + sharedHeaderBase +} + +type sharedHeader struct { version uint64 sharedHeaderBase } -func (h *statSegSharedHeader) legacyVersion() bool { +func (h *sharedHeader) legacyVersion() bool { // older VPP (<=19.04) did not have version in stat segment header // we try to provide fallback support by skipping it in header if h.version > maxVersion && h.inProgress > 1 && h.epoch == 0 { @@ -33,8 +37,8 @@ func (h *statSegSharedHeader) legacyVersion() bool { return false } -func statSegHeader(b []byte) (header statSegSharedHeader) { - h := (*statSegSharedHeader)(unsafe.Pointer(&b[0])) +func loadSharedHeader(b []byte) (header sharedHeader) { + h := (*sharedHeader)(unsafe.Pointer(&b[0])) header.version = atomic.LoadUint64(&h.version) header.epoch = atomic.LoadInt64(&h.epoch) header.inProgress = atomic.LoadInt64(&h.inProgress) @@ -44,8 +48,8 @@ func statSegHeader(b []byte) (header statSegSharedHeader) { return } -func statSegHeaderLegacy(b []byte) (header statSegSharedHeader) { - h := (*sharedHeaderBase)(unsafe.Pointer(&b[0])) +func loadSharedHeaderLegacy(b []byte) (header sharedHeader) { + h := (*sharedHeaderV0)(unsafe.Pointer(&b[0])) header.version = 0 header.epoch = atomic.LoadInt64(&h.epoch) header.inProgress = atomic.LoadInt64(&h.inProgress) @@ -90,7 +94,7 @@ type vecHeader struct { } func vectorLen(v unsafe.Pointer) uint64 { - vec := *(*vecHeader)(unsafe.Pointer(uintptr(v) - unsafe.Sizeof(uintptr(0)))) + vec := *(*vecHeader)(unsafe.Pointer(uintptr(v) - unsafe.Sizeof(uint64(0)))) return vec.length }