diff options
| author | 2025-06-11 11:38:10 +0200 | |
|---|---|---|
| committer | 2025-06-11 11:38:10 +0200 | |
| commit | e87681d43336273f93786f140a362c39a9b36ab4 (patch) | |
| tree | bd86661604f55a46306b1662ac62192595520bcb /internal/middleware | |
| parent | [feature] configurable maximum thumbnail dimensions (#4258) (diff) | |
| download | gotosocial-e87681d43336273f93786f140a362c39a9b36ab4.tar.xz | |
[bugfix] process account delete synchronously to prevent OOM (#4260)
# Description
- updates account delete processing to handle side-effects synchronously to prevent OOM
- updates account delete processing to check more often if account.IsLocal() for certain deletes / side-effects
- ensures that mutes get removed from database on delete
## Checklist
- [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md).
- [x] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat.
- [x] I/we have not leveraged AI to create the proposed changes.
- [x] I/we have performed a self-review of added code.
- [x] I/we have written code that is legible and maintainable by others.
- [x] I/we have commented the added code, particularly in hard-to-understand areas.
- [ ] I/we have made any necessary changes to documentation.
- [ ] I/we have added tests that cover new code.
- [ ] I/we have run tests and they pass locally with the changes.
- [x] I/we have run `go fmt ./...` and `golangci-lint run`.
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4260
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'internal/middleware')
| -rw-r--r-- | internal/middleware/logger.go | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/internal/middleware/logger.go b/internal/middleware/logger.go index 00e940992..350e7552c 100644 --- a/internal/middleware/logger.go +++ b/internal/middleware/logger.go @@ -20,15 +20,14 @@ package middleware import ( "fmt" "net/http" - "runtime" "strings" "time" "code.superseriousbusiness.org/gotosocial/internal/gtscontext" "code.superseriousbusiness.org/gotosocial/internal/gtserror" "code.superseriousbusiness.org/gotosocial/internal/log" + "code.superseriousbusiness.org/gotosocial/internal/util" "codeberg.org/gruf/go-bytesize" - "codeberg.org/gruf/go-errors/v2" "codeberg.org/gruf/go-kv" "github.com/gin-gonic/gin" ) @@ -49,23 +48,18 @@ func Logger(logClientIP bool) gin.HandlerFunc { // Get request context. ctx := c.Request.Context() - if r := recover(); r != nil { + // Recover from any panics + // and dump stack to stderr. + if r := util.Recover(); r != nil { + if code == 0 { // No response was written, send a generic Internal Error c.Writer.WriteHeader(http.StatusInternalServerError) } - // Append panic information to the request ctx + // Append panic information to the request. err := fmt.Errorf("recovered panic: %v", r) _ = c.Error(err) - - // Dump a stacktrace to error log - pcs := make([]uintptr, 10) - n := runtime.Callers(3, pcs) - iter := runtime.CallersFrames(pcs[:n]) - callers := errors.Callers(gatherFrames(iter, n)) - log.WithContext(c.Request.Context()). - WithField("stacktrace", callers).Error(err) } // Initialize the logging fields @@ -134,7 +128,7 @@ func Logger(logClientIP bool) gin.HandlerFunc { } } - // Generate a nicer looking bytecount + // Generate a nicer looking bytecount. size := bytesize.Size(c.Writer.Size()) // #nosec G115 -- Just logging // Write log entry with status text + body size. @@ -152,19 +146,3 @@ func Logger(logClientIP bool) gin.HandlerFunc { func sensitiveQuery(query string) bool { return strings.Contains(query, "token") } - -// gatherFrames gathers runtime frames from a frame iterator. -func gatherFrames(iter *runtime.Frames, n int) []runtime.Frame { - if iter == nil { - return nil - } - frames := make([]runtime.Frame, 0, n) - for { - f, ok := iter.Next() - if !ok { - break - } - frames = append(frames, f) - } - return frames -} |
