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