aboutsummaryrefslogtreecommitdiff
path: root/hotline
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-05 17:14:43 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-05 17:14:43 -0700
commit37a954c82b1e58d94bdb72c9fbdfc49c49785111 (patch)
treede3a98e91cc703af6a9d1fc9c924b53507cc9fa9 /hotline
parentd7548c16cdbff6f9baa2f545eb808030a6b3ec2e (diff)
DRY up duplicate panic handler func
Diffstat (limited to 'hotline')
-rw-r--r--hotline/server.go25
1 files changed, 12 insertions, 13 deletions
diff --git a/hotline/server.go b/hotline/server.go
index cf022fc..bace986 100644
--- a/hotline/server.go
+++ b/hotline/server.go
@@ -478,6 +478,15 @@ const (
minTransactionLen = 22 // minimum length of any transaction
)
+// dontPanic recovers and logs panics instead of crashing
+// TODO: remove this after known issues are fixed
+func dontPanic(logger *zap.SugaredLogger) {
+ if r := recover(); r != nil {
+ fmt.Println("stacktrace from panic: \n" + string(debug.Stack()))
+ logger.Errorw("PANIC", "err", r, "trace", string(debug.Stack()))
+ }
+}
+
// handleNewConnection takes a new net.Conn and performs the initial login sequence
func (s *Server) handleNewConnection(conn net.Conn) error {
handshakeBuf := make([]byte, 12) // handshakes are always 12 bytes in length
@@ -503,14 +512,9 @@ func (s *Server) handleNewConnection(conn net.Conn) error {
}
c := s.NewClientConn(conn)
+
defer c.Disconnect()
- defer func() {
- if r := recover(); r != nil {
- fmt.Println("stacktrace from panic: \n" + string(debug.Stack()))
- c.Server.Logger.Errorw("PANIC", "err", r, "trace", string(debug.Stack()))
- c.Disconnect()
- }
- }()
+ defer dontPanic(s.Logger)
encodedLogin := clientLogin.GetField(fieldUserLogin).Data
encodedPassword := clientLogin.GetField(fieldUserPassword).Data
@@ -652,12 +656,7 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
}
}()
- defer func() {
- if r := recover(); r != nil {
- fmt.Println("stacktrace from panic: \n" + string(debug.Stack()))
- s.Logger.Errorw("PANIC", "err", r, "trace", string(debug.Stack()))
- }
- }()
+ defer dontPanic(s.Logger)
txBuf := make([]byte, 16)
if _, err := io.ReadFull(conn, txBuf); err != nil {