summaryrefslogtreecommitdiff
path: root/internal/util/fns.go
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-06-11 11:38:10 +0200
committerLibravatar tobi <kipvandenbos@noreply.codeberg.org>2025-06-11 11:38:10 +0200
commite87681d43336273f93786f140a362c39a9b36ab4 (patch)
treebd86661604f55a46306b1662ac62192595520bcb /internal/util/fns.go
parent[feature] configurable maximum thumbnail dimensions (#4258) (diff)
downloadgotosocial-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/util/fns.go')
-rw-r--r--internal/util/fns.go28
1 files changed, 16 insertions, 12 deletions
diff --git a/internal/util/fns.go b/internal/util/fns.go
index 53f5ebeed..c82377030 100644
--- a/internal/util/fns.go
+++ b/internal/util/fns.go
@@ -32,18 +32,7 @@ func Must(fn func()) {
panic("nil func")
}
for !func() (done bool) {
- defer func() {
- if r := recover(); r != nil {
- // Gather calling func frames.
- pcs := make([]uintptr, 10)
- n := runtime.Callers(3, pcs)
- i := runtime.CallersFrames(pcs[:n])
- c := gatherFrames(i, n)
-
- const msg = "recovered panic: %v\n\n%s\n"
- fmt.Fprintf(os.Stderr, msg, r, c.String())
- }
- }()
+ defer Recover()
fn()
done = true
return
@@ -51,6 +40,21 @@ func Must(fn func()) {
}
}
+// Recover wraps runtime.recover() to dump the current
+// stack to stderr on panic and return the panic value.
+func Recover() any {
+ if r := recover(); r != nil {
+ // Gather calling func frames.
+ pcs := make([]uintptr, 10)
+ n := runtime.Callers(3, pcs)
+ i := runtime.CallersFrames(pcs[:n])
+ c := gatherFrames(i, n)
+ fmt.Fprintf(os.Stderr, "recovered panic: %v\n\n%s\n", r, c.String())
+ return r
+ }
+ return nil
+}
+
// gatherFrames collates runtime frames from a frame iterator.
func gatherFrames(iter *runtime.Frames, n int) errors.Callers {
if iter == nil {