From b4f186a5d496fd2085a2bf1405a6384cd7802236 Mon Sep 17 00:00:00 2001
From: chenshijun <chenshijun@aiotlink.com>
Date: 星期五, 24 四月 2020 16:34:05 +0800
Subject: [PATCH] 把延时单位修正成const=5毫秒,增加CreateShmOnlyTime接口
---
shmwrap.go | 36 ++++++++++++++++++++++++++++++++----
1 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/shmwrap.go b/shmwrap.go
index 8634dbf..418dc24 100644
--- a/shmwrap.go
+++ b/shmwrap.go
@@ -7,6 +7,8 @@
"github.com/gen2brain/shm"
)
+const sleepPeriod = time.Duration(5) * time.Millisecond
+
// NewBlock shm block with size
func NewBlock(size int, key int) ([]byte, int, error) {
id, err := shm.Get(key, size, shm.IPC_CREAT|0666)
@@ -72,7 +74,7 @@
if err == nil {
break loopB
}
- time.Sleep(time.Millisecond)
+ time.Sleep(sleepPeriod)
data, id, err = NewBlock(size, key)
}
}
@@ -93,7 +95,7 @@
if err == nil {
break loopB
}
- time.Sleep(time.Millisecond)
+ time.Sleep(sleepPeriod)
data, id, err = AttachBlock(key)
}
}
@@ -115,7 +117,33 @@
if err == nil {
break loopB
}
- time.Sleep(time.Millisecond)
+ time.Sleep(sleepPeriod)
+ id, err = NewBlockOnly(size, key)
+ }
+ }
+ }
+ return id
+}
+
+// CreateShmOnly create shm block with size, only space, no padding, return id(int)
+// context for quit
+func CreateShmOnlyTime(ctx context.Context, size int, key int, timeout int) int {
+ id, err := NewBlockOnly(size, key)
+ if err != nil {
+ to := time.NewTimer(time.Duration(timeout) * time.Millisecond)
+ defer to.Stop()
+ loopB:
+ for {
+ select {
+ case <-ctx.Done():
+ return -1
+ case <-to.C:
+ return -1
+ default:
+ if err == nil {
+ break loopB
+ }
+ time.Sleep(sleepPeriod)
id, err = NewBlockOnly(size, key)
}
}
@@ -139,7 +167,7 @@
} else {
fmt.Println("createShm error:", err)
}
- time.Sleep(time.Millisecond)
+ time.Sleep(sleepPeriod)
data, id, err = NewBlock(size, key)
}
}
--
Gitblit v1.8.0