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