X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=adapter%2Fstatsclient%2Fstatseg.go;h=42ab3de6112f770356b944eb2eee058c3528cc49;hb=c94a962279858fb13eaacc689f47aed358373e44;hp=7f1c3819dd8618b25a614f1280fc006759e1c765;hpb=809b69ea4a90455445c34bbad7d8e5fea5cf3462;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 }