🎨 细化云端同步锁提升稳定性 https://github.com/siyuan-note/siyuan/issues/5887

This commit is contained in:
Liang Ding 2022-09-17 22:56:02 +08:00
parent 3468fb0976
commit 9ab7030a81
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
10 changed files with 50 additions and 41 deletions

View file

@ -31,11 +31,28 @@ import (
"github.com/siyuan-note/logging"
)
var WritingFileLock = sync.Mutex{}
var writingFileLock = sync.Mutex{}
func LockWriteFile() {
if IsMutexLocked(&writingFileLock) {
logging.LogWarnf("write file is locked")
return
}
writingFileLock.Lock()
}
func UnlockWriteFile() {
if !IsMutexLocked(&writingFileLock) {
logging.LogWarnf("write file is not locked")
return
}
writingFileLock.Unlock()
}
func WriteFileSaferByReader(writePath string, reader io.Reader) (err error) {
WritingFileLock.Lock()
defer WritingFileLock.Unlock()
writingFileLock.Lock()
defer writingFileLock.Unlock()
if err = gulu.File.WriteFileSaferByReader(writePath, reader, 0644); nil != err {
logging.LogErrorf("write file [%s] failed: %s", writePath, err)
@ -45,8 +62,8 @@ func WriteFileSaferByReader(writePath string, reader io.Reader) (err error) {
}
func WriteFileSafer(writePath string, data []byte) (err error) {
WritingFileLock.Lock()
defer WritingFileLock.Unlock()
writingFileLock.Lock()
defer writingFileLock.Unlock()
if err = gulu.File.WriteFileSafer(writePath, data, 0644); nil != err {
logging.LogErrorf("write file [%s] failed: %s", writePath, err)
@ -56,8 +73,8 @@ func WriteFileSafer(writePath string, data []byte) (err error) {
}
func Copy(source, dest string) (err error) {
WritingFileLock.Lock()
defer WritingFileLock.Unlock()
writingFileLock.Lock()
defer writingFileLock.Unlock()
filelock.ReleaseFileLocks(source)
if err = gulu.File.Copy(source, dest); nil != err {
@ -68,8 +85,8 @@ func Copy(source, dest string) (err error) {
}
func RemoveAll(p string) (err error) {
WritingFileLock.Lock()
defer WritingFileLock.Unlock()
writingFileLock.Lock()
defer writingFileLock.Unlock()
filelock.ReleaseFileLocks(p)
if err = os.RemoveAll(p); nil != err {