From 2be5545dbf328786d42bbe375117cd6fa275b37a Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 26 Oct 2022 11:08:32 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=A1=8C=E9=9D=A2=E7=AB=AF=E5=86=85?= =?UTF-8?q?=E6=A0=B8=E5=9C=A8=E6=8E=88=E6=9D=83=E9=A1=B5=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=80=80=E5=87=BA=20https://github.com/siyuan-note/insider/iss?= =?UTF-8?q?ues/1099?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/electron/main.js | 2 +- kernel/model/process.go | 22 ++++++++++++++++------ kernel/server/serve.go | 11 ++++++++--- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/electron/main.js b/app/electron/main.js index a058820d4..9ccf9f604 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -551,8 +551,8 @@ const initKernel = (initData) => { writeLog('booted kernel process [pid=' + kernelProcessPid + ']') kernelProcess.on('close', (code) => { + writeLog(`kernel exited with code [${code}]`) if (0 !== code) { - writeLog(`kernel exited with code [${code}]`) switch (code) { case 20: showErrorWindow('⚠️ 数据库被锁定 The database is locked', diff --git a/kernel/model/process.go b/kernel/model/process.go index 1be4a41af..85827eeb4 100644 --- a/kernel/model/process.go +++ b/kernel/model/process.go @@ -32,16 +32,26 @@ func HookResident() { } for range time.Tick(time.Second * 30) { - if 0 == util.CountSessions() { - time.Sleep(time.Second * 7) - if 0 == util.CountSessions() { - logging.LogInfof("no active session, exit kernel process now") - Close(false, 1) - } + if makeSureSessionEmpty() { + logging.LogInfof("no active session, exit kernel process now") + Close(false, 1) } } } +func makeSureSessionEmpty() bool { + count := 0 + for i := 0; i < 7; i++ { + count = util.CountSessions() + //logging.LogDebugf("session count [%d]", count) + if 0 < count { + return false + } + time.Sleep(time.Second * 1) + } + return true +} + func HandleSignal() { c := make(chan os.Signal) signal.Notify(c, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM) diff --git a/kernel/server/serve.go b/kernel/server/serve.go index ced83e71a..679aad83b 100644 --- a/kernel/server/serve.go +++ b/kernel/server/serve.go @@ -308,7 +308,7 @@ func serveWebSocket(ginServer *gin.Engine) { }) util.WebSocketServer.HandlePong(func(session *melody.Session) { - //model.Logger.Debugf("pong") + //logging.LogInfof("pong") }) util.WebSocketServer.HandleConnect(func(s *melody.Session) { @@ -337,9 +337,14 @@ func serveWebSocket(ginServer *gin.Engine) { } } + if !authOk { + // 用于授权页保持连接,避免非常驻内存内核自动退出 https://github.com/siyuan-note/insider/issues/1099 + authOk = strings.Contains(s.Request.RequestURI, "/ws?app=siyuan&id=auth") + } + if !authOk { s.CloseWithMsg([]byte(" unauthenticated")) - //logging.LogWarnf("closed a unauthenticated session [%s]", util.GetRemoteAddr(s)) + //logging.LogWarnf("closed an unauthenticated session [%s]", util.GetRemoteAddr(s)) return } @@ -351,7 +356,7 @@ func serveWebSocket(ginServer *gin.Engine) { util.WebSocketServer.HandleDisconnect(func(s *melody.Session) { util.RemovePushChan(s) //sessionId, _ := s.Get("id") - //model.Logger.Debugf("ws [%s] disconnected", sessionId) + //logging.LogInfof("ws [%s] disconnected", sessionId) }) util.WebSocketServer.HandleError(func(s *melody.Session, err error) {