mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 15:10:12 +01:00
This commit is contained in:
parent
a1c81fda03
commit
e9c9f685f8
5 changed files with 35 additions and 0 deletions
|
|
@ -27,6 +27,7 @@ require (
|
||||||
github.com/gin-contrib/gzip v0.0.6
|
github.com/gin-contrib/gzip v0.0.6
|
||||||
github.com/gin-contrib/sessions v0.0.5
|
github.com/gin-contrib/sessions v0.0.5
|
||||||
github.com/gin-gonic/gin v1.8.1
|
github.com/gin-gonic/gin v1.8.1
|
||||||
|
github.com/gofrs/flock v0.8.1
|
||||||
github.com/imroc/req/v3 v3.26.4
|
github.com/imroc/req/v3 v3.26.4
|
||||||
github.com/jinzhu/copier v0.3.5
|
github.com/jinzhu/copier v0.3.5
|
||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,8 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78
|
||||||
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
|
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
|
||||||
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
|
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
|
||||||
|
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
|
|
|
||||||
|
|
@ -434,6 +434,7 @@ func Close(force bool, execInstallPkg int) (exitCode int) {
|
||||||
treenode.SaveBlockTree()
|
treenode.SaveBlockTree()
|
||||||
clearWorkspaceTemp()
|
clearWorkspaceTemp()
|
||||||
clearPortJSON()
|
clearPortJSON()
|
||||||
|
util.UnlockWorkspace()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ const (
|
||||||
ExitCodeUnavailablePort = 21 // 端口不可用
|
ExitCodeUnavailablePort = 21 // 端口不可用
|
||||||
ExitCodeCreateConfDirErr = 22 // 创建配置目录失败
|
ExitCodeCreateConfDirErr = 22 // 创建配置目录失败
|
||||||
ExitCodeBlockTreeErr = 23 // 无法读写 blocktree.msgpack 文件
|
ExitCodeBlockTreeErr = 23 // 无法读写 blocktree.msgpack 文件
|
||||||
|
ExitCodeWorkspaceLocked = 24 // 工作区已被锁定
|
||||||
ExitCodeOk = 0 // 正常退出
|
ExitCodeOk = 0 // 正常退出
|
||||||
ExitCodeFatal = 1 // 致命错误
|
ExitCodeFatal = 1 // 致命错误
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ import (
|
||||||
|
|
||||||
"github.com/88250/gulu"
|
"github.com/88250/gulu"
|
||||||
figure "github.com/common-nighthawk/go-figure"
|
figure "github.com/common-nighthawk/go-figure"
|
||||||
|
"github.com/gofrs/flock"
|
||||||
"github.com/siyuan-note/httpclient"
|
"github.com/siyuan-note/httpclient"
|
||||||
"github.com/siyuan-note/logging"
|
"github.com/siyuan-note/logging"
|
||||||
)
|
)
|
||||||
|
|
@ -95,6 +96,10 @@ func Boot() {
|
||||||
SSL = *ssl
|
SSL = *ssl
|
||||||
LogPath = filepath.Join(TempDir, "siyuan.log")
|
LogPath = filepath.Join(TempDir, "siyuan.log")
|
||||||
logging.SetLogPath(LogPath)
|
logging.SetLogPath(LogPath)
|
||||||
|
|
||||||
|
// 工作空间仅允许被一个内核进程伺服
|
||||||
|
tryLockWorkspace()
|
||||||
|
|
||||||
AppearancePath = filepath.Join(ConfDir, "appearance")
|
AppearancePath = filepath.Join(ConfDir, "appearance")
|
||||||
if "dev" == Mode {
|
if "dev" == Mode {
|
||||||
ThemesPath = filepath.Join(WorkingDir, "appearance", "themes")
|
ThemesPath = filepath.Join(WorkingDir, "appearance", "themes")
|
||||||
|
|
@ -154,6 +159,7 @@ var (
|
||||||
WorkingDir, _ = os.Getwd()
|
WorkingDir, _ = os.Getwd()
|
||||||
|
|
||||||
WorkspaceDir string // 工作空间目录路径
|
WorkspaceDir string // 工作空间目录路径
|
||||||
|
WorkspaceLock *flock.Flock // 工作空间锁
|
||||||
ConfDir string // 配置目录路径
|
ConfDir string // 配置目录路径
|
||||||
DataDir string // 数据目录路径
|
DataDir string // 数据目录路径
|
||||||
RepoDir string // 仓库目录路径
|
RepoDir string // 仓库目录路径
|
||||||
|
|
@ -437,3 +443,27 @@ func GetDataAssetsAbsPath() (ret string) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tryLockWorkspace() {
|
||||||
|
WorkspaceLock = flock.New(filepath.Join(WorkspaceDir, ".lock"))
|
||||||
|
if err := WorkspaceLock.Lock(); nil != err {
|
||||||
|
logging.LogErrorf("lock workspace [%s] failed: %s", WorkspaceDir, err)
|
||||||
|
os.Exit(ExitCodeWorkspaceLocked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func UnlockWorkspace() {
|
||||||
|
if nil == WorkspaceLock {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := WorkspaceLock.Unlock(); nil != err {
|
||||||
|
logging.LogErrorf("unlock workspace [%s] failed: %s", WorkspaceDir, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.Remove(filepath.Join(WorkspaceDir, ".lock")); nil != err {
|
||||||
|
logging.LogErrorf("remove workspace lock failed: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue