🔭 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>
This commit is contained in:
2026-08-06 12:51:46 -04:00
co-authored by Claude Opus 5
parent c5e6edc73e
commit 8182e459b0
+8
View File
@@ -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++) {