From 8182e459b06d3df3d692fd905917027bff4ace44 Mon Sep 17 00:00:00 2001 From: sergio Date: Thu, 6 Aug 2026 12:51:46 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=AD=20portal-probe:=20el=20log=20queda?= =?UTF-8?q?ba=20vac=C3=ADo=20justo=20mientras=20med=C3=ADa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- tools/portal-probe/portal-probe.c | 8 ++++++++ 1 file changed, 8 insertions(+) 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++) {