details: http://hg.nginx.org/njs/rev/b33ba39a1108 branches: changeset: 141:b33ba39a1108 user: Igor Sysoev <i...@sysoev.ru> date: Thu Aug 04 16:27:38 2016 +0300 description: nxt_trace files have been missed in the previous commit.
diffstat: nxt/nxt_trace.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++ nxt/nxt_trace.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 0 deletions(-) diffs (133 lines): diff -r 23598cfcfd15 -r b33ba39a1108 nxt/nxt_trace.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nxt/nxt_trace.c Thu Aug 04 16:27:38 2016 +0300 @@ -0,0 +1,57 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#include <nxt_auto_config.h> +#include <nxt_types.h> +#include <nxt_clang.h> +#include <nxt_malloc.h> +#include <nxt_trace.h> +#include <stdio.h> + + +static u_char * +nxt_last_handler(nxt_trace_t *trace, nxt_trace_data_t *td, u_char *start) +{ + int n; + ssize_t size; + + size = td->end - start; + n = vsnprintf((char *) start, size, td->fmt, td->args); + + if (n < size) { + start += n; + } + + return start; +} + + +void +nxt_trace_handler(nxt_trace_t *trace, uint32_t level, const char *fmt, ...) +{ + u_char *start; + nxt_trace_t last; + nxt_trace_data_t td; + + td.level = level; + td.fmt = fmt; + + va_start(td.args, fmt); + + start = alloca(trace->size); + td.end = start + trace->size; + + last.handler = nxt_last_handler; + trace->next = &last; + + while (trace->prev != NULL) { + trace = trace->prev; + } + + (void) trace->handler(trace, &td, start); + + va_end(td.args); +} diff -r 23598cfcfd15 -r b33ba39a1108 nxt/nxt_trace.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nxt/nxt_trace.h Thu Aug 04 16:27:38 2016 +0300 @@ -0,0 +1,68 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_TRACE_H_INCLUDED_ +#define _NXT_TRACE_H_INCLUDED_ + + +typedef enum { + NXT_LEVEL_CRIT = 0, + NXT_LEVEL_ERROR, + NXT_LEVEL_WARN, + NXT_LEVEL_INFO, + NXT_LEVEL_TRACE, +} nxt_trace_level_t; + + +typedef struct { + uint32_t level; + u_char *end; + const char *fmt; + va_list args; +} nxt_trace_data_t; + + +typedef struct nxt_trace_s nxt_trace_t; + +typedef u_char *(*nxt_trace_handler_t)(nxt_trace_t *trace, nxt_trace_data_t *td, + u_char *start); + +struct nxt_trace_s { + uint32_t level; + uint32_t size; + nxt_trace_handler_t handler; + void *data; + nxt_trace_t *prev; + nxt_trace_t *next; +}; + + +#define nxt_alert(_trace, _level, ...) \ + do { \ + nxt_trace_t *_trace_ = _trace; \ + uint32_t _level_ = _level; \ + \ + if (nxt_slow_path(_trace_->level >= _level_)) { \ + nxt_trace_handler(_trace_, _level_, __VA_ARGS__); \ + } \ + } while (0) + + +#define nxt_trace(_trace, ...) \ + do { \ + nxt_trace_t *_trace_ = _trace; \ + \ + if (nxt_slow_path(_trace_->level == NXT_LEVEL_TRACE)) { \ + nxt_trace_handler(_trace_, NXT_LEVEL_TRACE, __VA_ARGS__); \ + } \ + } while (0) + + +NXT_EXPORT void nxt_trace_handler(nxt_trace_t *trace, uint32_t level, + const char *fmt, ...); + + +#endif /* _NXT_TRACE_H_INCLUDED_ */ _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel