* See LICENSE.
*/
-#include <babeltrace/babeltrace-internal.h>
-#include <babeltrace/common-internal.h>
+#include <babeltrace2/babeltrace-internal.h>
+#include <babeltrace2/common-internal.h>
#include <pthread.h>
+#include <assert.h>
#ifdef __CYGWIN__
extern unsigned long pthread_getsequence_np(pthread_t *);
#else
#define BT_LOG_OPTIMIZE_SIZE 0
#endif
-/* Size of the log line buffer. The buffer is allocated on stack. It limits
- * maximum length of a log line.
+/* Size of the log line buffer. The buffer is a globally allocated per thread.
*/
#ifndef BT_LOG_BUF_SZ
- #define BT_LOG_BUF_SZ 512
+ #define BT_LOG_BUF_SZ (4 * 4096)
#endif
/* Default number of bytes in one line of memory output. For large values
* BT_LOG_BUF_SZ also must be increased.
#undef __STRICT_ANSI__
#endif
#endif
-#include <assert.h>
+#include <babeltrace2/assert-internal.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#define BT_LOG_OUTPUT_LEVEL dummy
-#include <babeltrace/logging-internal.h>
-#include <babeltrace/logging.h>
+#include <babeltrace2/logging-internal.h>
+#include <babeltrace2/logging.h>
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#define memccpy _memccpy
#endif
-#if (defined(_MSC_VER) && !defined(__INTEL_COMPILER)) || defined(__MINGW64__)
+#if (defined(_MSC_VER) && !defined(__INTEL_COMPILER)) || \
+ (defined(__MINGW64__) && !defined(__USE_MINGW_ANSI_STDIO))
#define vsnprintf(s, sz, fmt, va) fake_vsnprintf(s, sz, fmt, va)
static int fake_vsnprintf(char *s, size_t sz, const char *fmt, va_list ap)
{
STATIC_ASSERT(eol_fits_eol_sz, sizeof(BT_LOG_EOL) <= BT_LOG_EOL_SZ);
STATIC_ASSERT(eol_sz_greater_than_zero, 0 < BT_LOG_EOL_SZ);
STATIC_ASSERT(eol_sz_less_than_buf_sz, BT_LOG_EOL_SZ < BT_LOG_BUF_SZ);
-#if !defined(_WIN32) && !defined(_WIN64)
- STATIC_ASSERT(buf_sz_less_than_pipe_buf, BT_LOG_BUF_SZ <= PIPE_BUF);
-#endif
static const char c_hex[] = "0123456789abcdef";
+static __thread char logging_buf[4 * 4096];
+
static INSTRUMENTED_CONST unsigned g_buf_sz = BT_LOG_BUF_SZ - BT_LOG_EOL_SZ;
static INSTRUMENTED_CONST time_cb g_time_cb = time_callback;
static INSTRUMENTED_CONST pid_cb g_pid_cb = pid_callback;
BT_LOG_DEFINE_GLOBAL_OUTPUT_LEVEL = 0;
#endif
+BT_HIDDEN
const bt_log_spec _bt_log_stderr_spec =
{
BT_LOG_GLOBAL_FORMAT,
const unsigned w, const char wc, char *const e)
{
static const char _signs[] = {'-', '0', '+'};
- static const char *const signs = _signs + 1;
+ const char *const signs = _signs + 1;
char *p = e;
do { *--p = '0' + v % 10; } while (0 != (v /= 10));
if (0 == sign) return put_padding_r(w, wc, p, e);
const int lvl, const char *const tag, const char *const fmt, va_list va)
{
bt_log_message msg;
- char buf[BT_LOG_BUF_SZ];
+ char *buf = logging_buf;
const unsigned mask = log->output->mask;
msg.lvl = lvl;
msg.tag = tag;