mirror of
				https://github.com/containers/podman.git
				synced 2025-11-04 08:56:05 +08:00 
			
		
		
		
	Moving from Go module v4 to v5 prepares us for public releases. Move done using gomove [1] as with the v3 and v4 moves. [1] https://github.com/KSubedi/gomove Signed-off-by: Matt Heon <mheon@redhat.com>
		
			
				
	
	
		
			33 lines
		
	
	
		
			926 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			926 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package server
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"net/http"
 | 
						|
	"runtime"
 | 
						|
 | 
						|
	"github.com/containers/podman/v5/pkg/api/handlers/utils"
 | 
						|
	"github.com/gorilla/mux"
 | 
						|
	"github.com/sirupsen/logrus"
 | 
						|
)
 | 
						|
 | 
						|
// panicHandler captures panics from endpoint handlers and logs stack trace
 | 
						|
func panicHandler() mux.MiddlewareFunc {
 | 
						|
	return func(h http.Handler) http.Handler {
 | 
						|
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
						|
			// http.Server hides panics from handlers, we want to record them and fix the cause
 | 
						|
			defer func() {
 | 
						|
				err := recover()
 | 
						|
				if err != nil {
 | 
						|
					buf := make([]byte, 1<<20)
 | 
						|
					n := runtime.Stack(buf, true)
 | 
						|
					logrus.Warnf("Recovering from API service endpoint handler panic: %v, %s", err, buf[:n])
 | 
						|
					// Try to inform client things went south... won't work if handler already started writing response body
 | 
						|
					utils.InternalServerError(w, fmt.Errorf("%v", err))
 | 
						|
				}
 | 
						|
			}()
 | 
						|
 | 
						|
			h.ServeHTTP(w, r)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |