Catch panics in portal message handler
This commit is contained in:
parent
53e992c25d
commit
bbcfff623d
1 changed files with 23 additions and 5 deletions
20
portal.go
20
portal.go
|
@ -24,6 +24,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
_ "image/gif"
|
_ "image/gif"
|
||||||
|
"runtime/debug"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -312,13 +313,30 @@ func (portal *Portal) handleMatrixMessageLoopItem(msg PortalMatrixMessage) {
|
||||||
|
|
||||||
func (portal *Portal) handleMessageLoop() {
|
func (portal *Portal) handleMessageLoop() {
|
||||||
for {
|
for {
|
||||||
|
portal.handleOneMessageLoopItem()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (portal *Portal) handleOneMessageLoopItem() {
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
logEvt := portal.zlog.WithLevel(zerolog.FatalLevel).
|
||||||
|
Str(zerolog.ErrorStackFieldName, string(debug.Stack()))
|
||||||
|
actualErr, ok := err.(error)
|
||||||
|
if ok {
|
||||||
|
logEvt = logEvt.Err(actualErr)
|
||||||
|
} else {
|
||||||
|
logEvt = logEvt.Any(zerolog.ErrorFieldName, err)
|
||||||
|
}
|
||||||
|
logEvt.Msg("Portal message handler panicked")
|
||||||
|
}
|
||||||
|
}()
|
||||||
select {
|
select {
|
||||||
case msg := <-portal.messages:
|
case msg := <-portal.messages:
|
||||||
portal.handleMessageLoopItem(msg)
|
portal.handleMessageLoopItem(msg)
|
||||||
case msg := <-portal.matrixMessages:
|
case msg := <-portal.matrixMessages:
|
||||||
portal.handleMatrixMessageLoopItem(msg)
|
portal.handleMatrixMessageLoopItem(msg)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (portal *Portal) isOutgoingMessage(msg *gmproto.Message) *database.Message {
|
func (portal *Portal) isOutgoingMessage(msg *gmproto.Message) *database.Message {
|
||||||
|
|
Loading…
Reference in a new issue