🎨 Improve kernel stability by eliminating some data races https://github.com/siyuan-note/siyuan/issues/9842

This commit is contained in:
Daniel 2023-12-08 21:46:46 +08:00
parent f9d476ebf5
commit 1d54de679f
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
7 changed files with 83 additions and 62 deletions

View file

@ -39,7 +39,7 @@ import (
var ErrFailedToConnectCloudServer = errors.New("failed to connect cloud server")
func CloudChatGPT(msg string, contextMsgs []string) (ret string, stop bool, err error) {
if nil == Conf.User {
if nil == Conf.GetUser() {
return
}
@ -61,7 +61,7 @@ func CloudChatGPT(msg string, contextMsgs []string) (ret string, stop bool, err
request := httpclient.NewCloudRequest30s()
_, err = request.
SetSuccessResult(requestResult).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
SetBody(payload).
Post(util.GetCloudServer() + "/apis/siyuan/ai/chatGPT")
if nil != err {
@ -99,7 +99,7 @@ func CloudChatGPT(msg string, contextMsgs []string) (ret string, stop bool, err
}
func StartFreeTrial() (err error) {
if nil == Conf.User {
if nil == Conf.GetUser() {
return errors.New(Conf.Language(31))
}
@ -107,7 +107,7 @@ func StartFreeTrial() (err error) {
request := httpclient.NewCloudRequest30s()
_, err = request.
SetSuccessResult(requestResult).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/user/startFreeTrial")
if nil != err {
logging.LogErrorf("start free trial failed: %s", err)
@ -124,7 +124,7 @@ func DeactivateUser() (err error) {
request := httpclient.NewCloudRequest30s()
resp, err := request.
SetSuccessResult(requestResult).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/user/deactivate")
if nil != err {
logging.LogErrorf("deactivate user failed: %s", err)
@ -150,7 +150,7 @@ func SetCloudBlockReminder(id, data string, timed int64) (err error) {
resp, err := request.
SetSuccessResult(requestResult).
SetBody(payload).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/calendar/setBlockReminder")
if nil != err {
logging.LogErrorf("set block reminder failed: %s", err)
@ -182,7 +182,7 @@ func LoadUploadToken() (err error) {
request := httpclient.NewCloudRequest30s()
resp, err := request.
SetSuccessResult(requestResult).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/upload/token")
if nil != err {
logging.LogErrorf("get upload token failed: %s", err)
@ -228,8 +228,8 @@ func refreshSubscriptionExpirationRemind() {
defer logging.Recover()
if IsSubscriber() && -1 != Conf.User.UserSiYuanProExpireTime {
expired := int64(Conf.User.UserSiYuanProExpireTime)
if IsSubscriber() && -1 != Conf.GetUser().UserSiYuanProExpireTime {
expired := int64(Conf.GetUser().UserSiYuanProExpireTime)
now := time.Now().UnixMilli()
if now >= expired { // 已经过期
if now-expired <= 1000*60*60*24*2 { // 2 天内提醒 https://github.com/siyuan-note/siyuan/issues/7816
@ -240,7 +240,7 @@ func refreshSubscriptionExpirationRemind() {
}
remains := int((expired - now) / 1000 / 60 / 60 / 24)
expireDay := 15 // 付费订阅提前 15 天提醒
if 2 == Conf.User.UserSiYuanSubscriptionPlan {
if 2 == Conf.GetUser().UserSiYuanSubscriptionPlan {
expireDay = 3 // 试用订阅提前 3 天提醒
}
@ -256,10 +256,10 @@ func refreshSubscriptionExpirationRemind() {
func refreshUser() {
defer logging.Recover()
if nil != Conf.User {
if nil != Conf.GetUser() {
time.Sleep(2 * time.Minute)
if nil != Conf.User {
RefreshUser(Conf.User.UserToken)
if nil != Conf.GetUser() {
RefreshUser(Conf.GetUser().UserToken)
}
subscriptionExpirationReminded = false
}
@ -329,22 +329,22 @@ func RefreshUser(token string) {
threeDaysAfter := util.CurrentTimeMillis() + 1000*60*60*24*3
if "" == token {
if "" != Conf.UserData {
Conf.User = loadUserFromConf()
Conf.SetUser(loadUserFromConf())
}
if nil == Conf.User {
if nil == Conf.GetUser() {
return
}
var tokenExpireTime int64
tokenExpireTime, err := strconv.ParseInt(Conf.User.UserTokenExpireTime+"000", 10, 64)
tokenExpireTime, err := strconv.ParseInt(Conf.GetUser().UserTokenExpireTime+"000", 10, 64)
if nil != err {
logging.LogErrorf("convert token expire time [%s] failed: %s", Conf.User.UserTokenExpireTime, err)
logging.LogErrorf("convert token expire time [%s] failed: %s", Conf.GetUser().UserTokenExpireTime, err)
util.PushErrMsg(Conf.Language(19), 5000)
return
}
if threeDaysAfter > tokenExpireTime {
token = Conf.User.UserToken
token = Conf.GetUser().UserToken
goto Net
}
return
@ -354,15 +354,15 @@ Net:
start := time.Now()
user, err := getUser(token)
if err != nil {
if nil == Conf.User || errInvalidUser == err {
if nil == Conf.GetUser() || errInvalidUser == err {
util.PushErrMsg(Conf.Language(19), 5000)
return
}
var tokenExpireTime int64
tokenExpireTime, err = strconv.ParseInt(Conf.User.UserTokenExpireTime+"000", 10, 64)
tokenExpireTime, err = strconv.ParseInt(Conf.GetUser().UserTokenExpireTime+"000", 10, 64)
if nil != err {
logging.LogErrorf("convert token expire time [%s] failed: %s", Conf.User.UserTokenExpireTime, err)
logging.LogErrorf("convert token expire time [%s] failed: %s", Conf.GetUser().UserTokenExpireTime, err)
util.PushErrMsg(Conf.Language(19), 5000)
return
}
@ -374,7 +374,7 @@ Net:
return
}
Conf.User = user
Conf.SetUser(user)
data, _ := gulu.JSON.MarshalJSON(user)
Conf.UserData = util.AESEncrypt(string(data))
Conf.Save()
@ -407,7 +407,7 @@ func RemoveCloudShorthands(ids []string) (err error) {
}
resp, err := request.
SetSuccessResult(&result).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
SetBody(body).
Post(util.GetCloudServer() + "/apis/siyuan/inbox/removeCloudShorthands")
if nil != err {
@ -435,7 +435,7 @@ func GetCloudShorthand(id string) (ret map[string]interface{}, err error) {
request := httpclient.NewCloudRequest30s()
resp, err := request.
SetSuccessResult(&result).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/inbox/getCloudShorthand?id=" + id)
if nil != err {
logging.LogErrorf("get cloud shorthand failed: %s", err)
@ -475,7 +475,7 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
request := httpclient.NewCloudRequest30s()
resp, err := request.
SetSuccessResult(&result).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/inbox/getCloudShorthands?p=" + strconv.Itoa(page))
if nil != err {
logging.LogErrorf("get cloud shorthands failed: %s", err)
@ -565,7 +565,7 @@ func UseActivationcode(code string) (err error) {
_, err = request.
SetSuccessResult(requestResult).
SetBody(map[string]string{"data": code}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/useActivationcode")
if nil != err {
logging.LogErrorf("check activation code failed: %s", err)
@ -586,7 +586,7 @@ func CheckActivationcode(code string) (retCode int, msg string) {
_, err := request.
SetSuccessResult(requestResult).
SetBody(map[string]string{"data": code}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}).
SetCookies(&http.Cookie{Name: "symphony", Value: Conf.GetUser().UserToken}).
Post(util.GetCloudServer() + "/apis/siyuan/checkActivationcode")
if nil != err {
logging.LogErrorf("check activation code failed: %s", err)
@ -650,6 +650,6 @@ func Login2fa(token, code string) (map[string]interface{}, error) {
func LogoutUser() {
Conf.UserData = ""
Conf.User = nil
Conf.SetUser(nil)
Conf.Save()
}