1 #ifndef DDEBUG_H
2 #define DDEBUG_H
3
4
5 #include <ngx_config.h>
6 #include <ngx_core.h>
7 #include <ngx_http.h>
8 #include <nginx.h>
9
10
11 #if defined(DDEBUG) && (DDEBUG)
12
13 # if (NGX_HAVE_VARIADIC_MACROS)
14
15 # define dd(...) fprintf(stderr, "srcache *** %s: ", __func__); \
16 fprintf(stderr, __VA_ARGS__); \
17 fprintf(stderr, " at %s line %d.\n", __FILE__, __LINE__)
18
19 # else
20
21 #include <stdarg.h>
22 #include <stdio.h>
23
24 #include <stdarg.h>
25
26 static ngx_inline void
dd(const char * fmt,...)27 dd(const char * fmt, ...) {
28 }
29
30 # endif
31
32 # if DDEBUG > 1
33
34 # define dd_enter() dd_enter_helper(r, __func__)
35
36
37 # if defined(nginx_version) && nginx_version >= 8011
38 # define dd_main_req_count r->main->count
39 # else
40 # define dd_main_req_count 0
41 # endif
42
43 static ngx_inline void
dd_enter_helper(ngx_http_request_t * r,const char * func)44 dd_enter_helper(ngx_http_request_t *r, const char *func) {
45 ngx_http_posted_request_t *pr;
46
47 fprintf(stderr, ">enter %s %.*s %.*s?%.*s c:%d m:%p r:%p ar:%p pr:%p",
48 func,
49 (int) r->method_name.len, r->method_name.data,
50 (int) r->uri.len, r->uri.data,
51 (int) r->args.len, r->args.data,
52 (int) dd_main_req_count, r->main,
53 r, r->connection->data, r->parent);
54
55 if (r->posted_requests) {
56 fprintf(stderr, " posted:");
57
58 for (pr = r->posted_requests; pr; pr = pr->next) {
59 fprintf(stderr, "%p,", pr);
60 }
61 }
62
63 fprintf(stderr, "\n");
64 }
65
66 # else
67
68 # define dd_enter()
69
70 # endif
71
72 #else
73
74 # if (NGX_HAVE_VARIADIC_MACROS)
75
76 # define dd(...)
77
78 # define dd_enter()
79
80 # else
81
82 #include <stdarg.h>
83
84 static ngx_inline void
dd(const char * fmt,...)85 dd(const char * fmt, ...) {
86 }
87
88 static ngx_inline void
dd_enter()89 dd_enter() {
90 }
91
92 # endif
93
94 #endif
95
96 #if defined(DDEBUG) && (DDEBUG)
97
98 #define dd_check_read_event_handler(r) \
99 dd("r->read_event_handler = %s", \
100 r->read_event_handler == ngx_http_block_reading ? \
101 "ngx_http_block_reading" : \
102 r->read_event_handler == ngx_http_test_reading ? \
103 "ngx_http_test_reading" : \
104 r->read_event_handler == ngx_http_request_empty_handler ? \
105 "ngx_http_request_empty_handler" : "UNKNOWN")
106
107 #define dd_check_write_event_handler(r) \
108 dd("r->write_event_handler = %s", \
109 r->write_event_handler == ngx_http_handler ? \
110 "ngx_http_handler" : \
111 r->write_event_handler == ngx_http_core_run_phases ? \
112 "ngx_http_core_run_phases" : \
113 r->write_event_handler == ngx_http_request_empty_handler ? \
114 "ngx_http_request_empty_handler" : "UNKNOWN")
115
116 #else
117
118 #define dd_check_read_event_handler(r)
119 #define dd_check_write_event_handler(r)
120
121 #endif
122
123 #endif /* DDEBUG_H */
124
125