Skip to content

Commit 1f1d231

Browse files
committed
Fix prefixing and suffixing in unbuffered fpm logging
1 parent 6a7abb6 commit 1f1d231

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

sapi/fpm/fpm/zlog.c

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -323,39 +323,53 @@ static inline ssize_t zlog_stream_unbuffered_write(struct zlog_stream *stream, c
323323
{
324324
int finished = 0;
325325
const char *append;
326-
size_t append_len;
326+
size_t append_len = 0, available_len;
327+
ssize_t written;
328+
329+
if (stream->len == 0) {
330+
stream->len = zlog_stream_prefix_ex(stream, stream->function, stream->line);
331+
}
327332

328333
if (stream->len + len >= zlog_limit) {
329334
if (stream->wrap) {
330-
if (stream->wrap_prefix != NULL) {
331-
zlog_stream_direct_write_ex(
332-
stream, stream->wrap_prefix, stream->wrap_prefix_len, NULL, 0);
333-
}
334-
len = zlog_limit - stream->len;
335+
available_len = zlog_limit - stream->len;
335336
if (stream->len + len == zlog_limit) {
336337
append = NULL;
337338
append_len = 0;
338339
} else {
339340
append = "\n";
340341
append_len = 1;
341342
}
342-
if (stream->wrap_suffix) {
343-
zlog_stream_direct_write(stream, buf, len);
343+
if (stream->wrap_suffix && append != NULL) {
344+
zlog_stream_direct_write(stream, buf, available_len);
344345
zlog_stream_direct_write_ex(
345346
stream, stream->wrap_suffix, stream->wrap_suffix_len, append, append_len);
346347
} else {
347-
zlog_stream_direct_write_ex(stream, buf, len, append, append_len);
348+
zlog_stream_direct_write_ex(stream, buf, available_len, append, append_len);
348349
}
350+
stream->len = 0;
349351
/* TODO: use loop to speed it up */
350-
return len + zlog_stream_unbuffered_write(stream, buf + len, len);
352+
written = zlog_stream_unbuffered_write(stream, buf + available_len, len - available_len);
353+
if (written > 0) {
354+
return available_len + written;
355+
}
356+
357+
return written;
351358
}
352359
stream->finished = finished = 1;
353360
append = (stream->len + len == zlog_limit) ? "\n" : "...\n";
354361
append_len = sizeof(append) - 1;
355362
len = zlog_limit - stream->len - append_len;
356363
}
357364

358-
return zlog_stream_direct_write_ex(stream, buf, len, append, append_len);
365+
written = zlog_stream_direct_write_ex(stream, buf, len, append, append_len);
366+
if (written > 0) {
367+
/* currently written will be always len as the write is blocking
368+
* - this should be address if we change to non-blocking write */
369+
stream->len += written;
370+
}
371+
372+
return written;
359373
}
360374
/* }}} */
361375

@@ -456,14 +470,16 @@ ssize_t zlog_stream_set_wrapping_prefix(struct zlog_stream *stream, const char *
456470
va_list args;
457471

458472
va_start(args, fmt);
459-
len = vsnprintf(buf, MAX_WRAPPING_PREFIX_LENGTH, fmt, args);
473+
len = vsnprintf(buf, MAX_WRAPPING_PREFIX_LENGTH - 1, fmt, args);
460474
va_end(args);
461475

462476
stream->wrap_prefix = malloc(len);
463-
if (stream->wrap_prefix != NULL) {
477+
if (stream->wrap_prefix == NULL) {
464478
return -1;
465479
}
466480
memcpy(stream->wrap_prefix, buf, len);
481+
stream->wrap_prefix[len] = 0;
482+
stream->wrap_prefix_len = len;
467483

468484
return len;
469485
}
@@ -603,7 +619,12 @@ zlog_bool zlog_stream_finish(struct zlog_stream *stream) /* {{{ */
603619
stream->buf[stream->len++] = '\n';
604620
zlog_stream_direct_write(stream, stream->buf, stream->len);
605621
} else if (!stream->finished) {
606-
if (stream->wrap_final_suffix != NULL) {
622+
if (stream->wrap_suffix != NULL) {
623+
zlog_stream_direct_write_ex(
624+
stream, stream->wrap_suffix, stream->wrap_suffix_len,
625+
stream->wrap_final_suffix, stream->wrap_final_suffix_len);
626+
zlog_stream_direct_write(stream, "\n", 1);
627+
} else if (stream->wrap_final_suffix != NULL) {
607628
zlog_stream_direct_write_ex(
608629
stream, stream->wrap_final_suffix, stream->wrap_final_suffix_len, "\n", 1);
609630
} else {

0 commit comments

Comments
 (0)