From f6738bc22f2c4065f1681d8a5f06bcaf21ff5c46 Mon Sep 17 00:00:00 2001
From: chenshijun <chenshijun@aiotlink.com>
Date: 星期五, 03 四月 2020 13:20:03 +0800
Subject: [PATCH] shmdata 的shmData转内存slice的capacity修改成实际shmdata的长度减去预留32字节记录Len的字段
---
shmData.go | 25 +++++++++++++------------
1 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/shmData.go b/shmData.go
index eb9e5c1..56ec5ac 100644
--- a/shmData.go
+++ b/shmData.go
@@ -7,7 +7,7 @@
// []byte struct
type ShmDataInfo struct {
- Capacity uint32
+ Len uint32
Cache []byte
}
@@ -18,11 +18,12 @@
))
}
+const SHMSLICEOFFSET int = 32
// ConvertToSlice convert to []byte
-func ptr2Slice(s unsafe.Pointer, size int) []byte {
+func ptr2Slice(s unsafe.Pointer, size,cap int) []byte {
var x reflect.SliceHeader
x.Len = size
- x.Cap = size
+ x.Cap = cap
x.Data = uintptr(s)
return *(*[]byte)(unsafe.Pointer(&x))
}
@@ -37,12 +38,12 @@
}
sdi := shmData2Info(shmData)
if len(data) <= len(shmData) {
- sdi.Capacity = uint32(len(data))
+ sdi.Len = uint32(len(data))
} else {
- sdi.Capacity = uint32(len(shmData))
+ sdi.Len = uint32(len(shmData))
}
- tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity))
+ tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET)
copy(tmpData, data)
err = Detach(shmData)
@@ -62,7 +63,7 @@
}
sdi := shmData2Info(shmData)
- tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity))
+ tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET)
return tmpData, nil
}
@@ -74,12 +75,12 @@
func DeepCopyDataToShm(memData,shmData []byte) {
sdi := shmData2Info(shmData)
if len(memData) <= len(shmData) {
- sdi.Capacity = uint32(len(memData))
+ sdi.Len = uint32(len(memData))
} else {
- sdi.Capacity = uint32(len(shmData))
+ sdi.Len = uint32(len(shmData))
}
- tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity))
+ tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET)
copy(tmpData, memData)
}
@@ -89,7 +90,7 @@
// 浠庡叡浜唴瀛樹腑璇诲彇鏁版嵁浣跨敤:attach->ConvertShmToData->鍙,涓氬姟澶勭悊缁撴潫鍚�->detach
func ConvertShmToData(shmData []byte) []byte {
sdi := shmData2Info(shmData)
- tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity))
+ tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET)
return tmpData
}
@@ -99,5 +100,5 @@
// 鏇存柊鏁版嵁鍒板叡浜唴瀛樹娇鐢�: attach->ConvertShmToData->淇敼data鏁版嵁,涓氬姟澶勭悊缁撴潫鍚�->UpdateDataToShm->detach
func UpdateDataToShm(data, shmData []byte) {
sdi := shmData2Info(shmData)
- sdi.Capacity = uint32(len(data))
+ sdi.Len = uint32(len(data))
}
\ No newline at end of file
--
Gitblit v1.8.0