summaryrefslogtreecommitdiff
path: root/docs/config.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/config.md')
-rw-r--r--docs/config.md24
1 files changed, 12 insertions, 12 deletions
diff --git a/docs/config.md b/docs/config.md
index b95f207e..448ac763 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -102,24 +102,24 @@ the one place this program cannot keep a trace: in the TTY shell stderr IS the
screen, so the trace lands on a grid the terminal is being reset out of; the SDL
and AppKit shells have no terminal at all; and a `--detach` session's stderr
goes wherever its launcher left it. The file is appended, never rewritten, and
-each record is one line of build metadata, the panic message, and the return
-addresses behind it:
+each record is two lines — build metadata, then the panic message:
```text
pardes 0.0.2 (a1b2c3d) 2026-09-03T11:20:44Z linux-x86_64 pid 48812
panic: index out of bounds: index 4, len 4
- 0x11ccb5a
- 0x11cc84c
- 0x11cc67a
```
-`addr2line -e <the pardes binary>` turns those into source lines, against the
-build the metadata line names. They are addresses rather than the symbolised
-trace stderr gets for a measured reason: symbolising from inside a panic
-handler, before `std.debug.defaultPanic` has run, HANGS the process — reading
-DWARF can itself panic, and the staging that turns a nested panic into
-"aborting due to recursive panic" is `defaultPanic`'s own and private. Walking
-frames is safe; symbolising them is not.
+NO STACK TRACE, and that is a measured decision rather than an omission. The
+frames stay on stderr, where `std.debug.defaultPanic` prints them. Collecting
+them here instead HANGS the process: `writeCurrentStackTrace` called from a
+panic handler before `defaultPanic` has run wedges at 0% CPU, and
+`captureCurrentStackTrace` — which looks like the safe half — takes `SelfInfo`'s
+rwlock exclusively on its first call, so a panic inside the walk leaves that
+lock held and `defaultPanic` then waits on it forever. What makes `defaultPanic`
+survive the same hazard is its own private `panic_stage`, which nothing outside
+`std.debug` can reach. A crash that becomes a hang is worse than the crash, so
+this file keeps only what it can gather without asking the process any
+questions: which build, when, where, and what it said.
Everything about it is best effort and silent: no config directory (a launch
with no `HOME`) means no file, and a directory that cannot be created or opened