Files
Atay-Makhzan/modules/web/routing/context.go
T

51 lines
1.2 KiB
Go
Raw Normal View History

2022-01-20 19:41:25 +08:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package routing
import (
"context"
"net/http"
)
type contextKeyType struct{}
var contextKey contextKeyType
2022-01-20 18:46:10 +01:00
// UpdateFuncInfo updates a context's func info
2022-01-20 19:41:25 +08:00
func UpdateFuncInfo(ctx context.Context, funcInfo *FuncInfo) {
record, ok := ctx.Value(contextKey).(*requestRecord)
if !ok {
return
}
record.lock.Lock()
record.funcInfo = funcInfo
record.lock.Unlock()
}
// MarkLongPolling marks the reuqest is a long-polling request, and the logger may output different message for it
func MarkLongPolling(resp http.ResponseWriter, req *http.Request) {
record, ok := req.Context().Value(contextKey).(*requestRecord)
if !ok {
return
}
record.lock.Lock()
record.isLongPolling = true
record.lock.Unlock()
}
2022-01-20 18:46:10 +01:00
// UpdatePanicError updates a context's error info, a panic may be recovered by other middlewares, but we still need to know that.
2022-01-20 19:41:25 +08:00
func UpdatePanicError(ctx context.Context, err interface{}) {
record, ok := ctx.Value(contextKey).(*requestRecord)
if !ok {
return
}
record.lock.Lock()
record.panicError = err
record.lock.Unlock()
}