tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1471Shell 174Rust 105Markdown 953567 Definitions

🔭 portal-probe: el log quedaba vacío justo mientras medía

Redirigida a fichero, stdout se bufferiza por bloques: mientras la sonda espera un
Response el log muestra sólo la línea de la llamada. Eso se lee como «se colgó al
llamar» cuando en realidad estaba esperando como debe. Nos pasó depurando ScreenCast en
metal — dos minutos mirando un fichero que no avanzaba, con la sonda perfectamente viva.

setvbuf(_IOLBF) incondicional, no sólo cuando la salida es una terminal: el caso que
importa es justamente el redirigido.

Una sonda que no se puede leer MIENTRAS mide es media sonda.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

8182e459b06d3df3d692fd905917027bff4ace44 · by sergio · (2 months ago) · parent c5e6edc73 · browse the tree at this commit

Semantic delta · 1

tools/portal-probe/portal-probe.c

  • body changed def main pub

1 files · +8 −0

diff --git a/tools/portal-probe/portal-probe.c b/tools/portal-probe/portal-probe.c
index 7dbb080f..cf2e5a7f 100644
--- a/tools/portal-probe/portal-probe.c
+++ b/tools/portal-probe/portal-probe.c
@@ -404,6 +404,14 @@ static int do_screenshot(DBusConnection *bus)
 
 int main(int argc, char **argv)
 {
+    /* Línea a línea, SIEMPRE — no sólo cuando la salida es una terminal. Redirigida a fichero,
+     * stdout se bufferiza por bloques y el log queda vacío mientras la sonda espera: justo el
+     * tramo que interesa mirar. Medido el 2026-08-06 depurando ScreenCast en metal — la sonda
+     * llevaba minutos esperando un Response y el fichero mostraba sólo la línea de la llamada,
+     * que se lee como «se colgó al llamar» cuando en realidad estaba esperando como debía. Una
+     * sonda que no se puede leer MIENTRAS mide es media sonda. */
+    setvbuf(stdout, NULL, _IOLBF, 0);
+
     const char *cmd = argc > 1 ? argv[1] : "version";
     int multiple = 0, window = 0, save = 0;
     for (int i = 2; i < argc; i++) {