manager: flush memory stream before using the buffer
When the manager receives a SIGUSR2 signal, it opens a memory stream with open_memstream(), uses the returned file handle for logging, and dumps the logged content with log_dump(). However, the char* buffer is only safe to use after the file handle has been flushed with fflush, as the man pages states: When the stream is closed (fclose(3)) or flushed (fflush(3)), the locations pointed to by ptr and sizeloc are updated to contain, respectively, a pointer to the buffer and the current size of the buffer. These values remain valid only as long as the caller performs no further output on the stream. If further output is performed, then the stream must again be flushed before trying to access these variables. Without that call, dump remains NULL and the daemon crashes in log_dump().
This commit is contained in:
parent
8a39439e08
commit
b2cdc6664e
|
@ -1621,6 +1621,11 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t
|
|||
break;
|
||||
}
|
||||
|
||||
if (fflush(f)) {
|
||||
log_warning("Failed to flush status stream");
|
||||
break;
|
||||
}
|
||||
|
||||
log_dump(LOG_INFO, dump);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue