From 775b076861a1d2c260c32befef12770833baeffd Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 29 十月 2019 11:17:47 +0800
Subject: [PATCH] fixed

---
 create.go |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/create.go b/create.go
index 8fa3080..bcbe124 100644
--- a/create.go
+++ b/create.go
@@ -6,13 +6,11 @@
 package shm
 
 import (
-	"golang.org/x/sys/unix"
 	"os"
 	"sync/atomic"
 	"unsafe"
 
-	"github.com/tmthrgd/go-sem"
-	"github.com/tmthrgd/go-shm"
+	"golang.org/x/sys/unix"
 )
 
 func CreateSimplex(name string, perm os.FileMode, blockCount, blockSize int) (*ReadWriteCloser, error) {
@@ -20,7 +18,15 @@
 		return nil, ErrNotMultipleOf64
 	}
 
-	file, err := shm.Open(name, unix.O_CREAT|unix.O_EXCL|unix.O_TRUNC|unix.O_RDWR, perm)
+	flag := unix.O_CREAT | unix.O_EXCL | unix.O_TRUNC | unix.O_RDWR
+	_, err := os.Stat(devShm + name)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			flag = unix.O_TRUNC | unix.O_RDWR
+		}
+	}
+
+	file, err := Open(name, flag, perm)
 	if err != nil {
 		return nil, err
 	}
@@ -50,11 +56,11 @@
 	 */
 	*(*uint32)(&shared.BlockCount), *(*uint64)(&shared.BlockSize) = uint32(blockCount), uint64(blockSize)
 
-	if err = ((*sem.Semaphore)(&shared.SemSignal)).Init(0); err != nil {
+	if err = ((*Semaphore)(&shared.SemSignal)).Init(0); err != nil {
 		return nil, err
 	}
 
-	if err = ((*sem.Semaphore)(&shared.SemAvail)).Init(0); err != nil {
+	if err = ((*Semaphore)(&shared.SemAvail)).Init(0); err != nil {
 		return nil, err
 	}
 
@@ -91,7 +97,7 @@
 		return nil, ErrNotMultipleOf64
 	}
 
-	file, err := shm.Open(name, unix.O_CREAT|unix.O_EXCL|unix.O_TRUNC|unix.O_RDWR, perm)
+	file, err := Open(name, unix.O_CREAT|unix.O_EXCL|unix.O_TRUNC|unix.O_RDWR, perm)
 	if err != nil {
 		return nil, err
 	}
@@ -123,11 +129,11 @@
 		 */
 		*(*uint32)(&shared.BlockCount), *(*uint64)(&shared.BlockSize) = uint32(blockCount), uint64(blockSize)
 
-		if err = ((*sem.Semaphore)(&shared.SemSignal)).Init(0); err != nil {
+		if err = ((*Semaphore)(&shared.SemSignal)).Init(0); err != nil {
 			return nil, err
 		}
 
-		if err = ((*sem.Semaphore)(&shared.SemAvail)).Init(0); err != nil {
+		if err = ((*Semaphore)(&shared.SemAvail)).Init(0); err != nil {
 			return nil, err
 		}
 

--
Gitblit v1.8.0