aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdnan Maolood <[email protected]>2021-02-21 11:04:28 -0500
committerAdnan Maolood <[email protected]>2021-02-21 11:04:45 -0500
commitbb444fb3642afa6c8af6780be26edfeb05ff48d1 (patch)
treeb3ef6302307c7eb19628476f9afc4c9df9feac6e
parentfs: Use better error messages (diff)
downloadgo-gemini-bb444fb3642afa6c8af6780be26edfeb05ff48d1.tar.xz
go-gemini-bb444fb3642afa6c8af6780be26edfeb05ff48d1.zip
server: Don't recover from panics
-rw-r--r--gemini.go6
-rw-r--r--handler.go7
-rw-r--r--server.go10
3 files changed, 0 insertions, 23 deletions
diff --git a/gemini.go b/gemini.go
index 9e6c653..de3a317 100644
--- a/gemini.go
+++ b/gemini.go
@@ -21,12 +21,6 @@ var (
// methods after a call to Shutdown or Close.
ErrServerClosed = errors.New("gemini: server closed")
- // ErrAbortHandler is a sentinel panic value to abort a handler.
- // While any panic from ServeGemini aborts the response to the client,
- // panicking with ErrAbortHandler also suppresses logging of a stack
- // trace to the server's error log.
- ErrAbortHandler = errors.New("gemini: abort Handler")
-
// ErrHandlerTimeout is returned on ResponseWriter Write calls
// in handlers which have timed out.
ErrHandlerTimeout = errors.New("gemini: Handler timeout")
diff --git a/handler.go b/handler.go
index 5f3ee80..e17e9db 100644
--- a/handler.go
+++ b/handler.go
@@ -14,13 +14,6 @@ import (
// of the ServeGemini call.
//
// Handlers should not modify the provided Request.
-//
-// If ServeGemini panics, the server (the caller of ServeGemini) assumes that
-// the effect of the panic was isolated to the active request. It recovers
-// the panic, logs a stack trace to the server error log, and closes the
-// network connection. To abort a handler so the client sees an interrupted
-// response but the server doesn't log an error, panic with the value
-// ErrAbortHandler.
type Handler interface {
ServeGemini(context.Context, ResponseWriter, *Request)
}
diff --git a/server.go b/server.go
index c2983bb..8484eec 100644
--- a/server.go
+++ b/server.go
@@ -6,7 +6,6 @@ import (
"errors"
"log"
"net"
- "runtime"
"sync"
"sync/atomic"
"time"
@@ -298,15 +297,6 @@ func (srv *Server) serveConn(ctx context.Context, conn net.Conn) {
defer srv.tryFinishShutdown()
defer srv.deleteConn(&conn)
- defer func() {
- if err := recover(); err != nil && err != ErrAbortHandler {
- const size = 64 << 10
- buf := make([]byte, size)
- buf = buf[:runtime.Stack(buf, false)]
- srv.logf("gemini: panic serving %v: %v\n%s", conn.RemoteAddr(), err, buf)
- }
- }()
-
if d := srv.ReadTimeout; d != 0 {
conn.SetReadDeadline(time.Now().Add(d))
}