From 82a262ef5cf721e5a236c8b1d2ab3ff92ca33122 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期五, 24 九月 2021 11:40:20 +0800
Subject: [PATCH] bug fixed withintime

---
 shmData.go |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/shmData.go b/shmData.go
index eb9e5c1..fad696c 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))
 }
@@ -36,13 +37,13 @@
 		return err
 	}
 	sdi := shmData2Info(shmData)
-	if len(data) <= len(shmData) {
-		sdi.Capacity = uint32(len(data))
+	if len(data) <= len(shmData)-SHMSLICEOFFSET {
+		sdi.Len = uint32(len(data))
 	} else {
-		sdi.Capacity = uint32(len(shmData))
+		sdi.Len = uint32(len(shmData)-SHMSLICEOFFSET)
 	}
 
-	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
 }
@@ -73,13 +74,13 @@
 // 閫傚悎瑙g爜浣跨敤
 func DeepCopyDataToShm(memData,shmData []byte) {
 	sdi := shmData2Info(shmData)
-	if len(memData) <= len(shmData) {
-		sdi.Capacity = uint32(len(memData))
+	if len(memData) <= len(shmData)-SHMSLICEOFFSET {
+		sdi.Len = uint32(len(memData))
 	} else {
-		sdi.Capacity = uint32(len(shmData))
+		sdi.Len = uint32(len(shmData)-SHMSLICEOFFSET)
 	}
 
-	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