xref: /unit/src/nxt_source.h (revision 2084:7d479274f334)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_SOURCE_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_SOURCE_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
110Sigor@sysoev.ru /*
120Sigor@sysoev.ru  * A source handler should store a pointer to a passed source hook, but not
130Sigor@sysoev.ru  * the hook's values themselves, because a source filter may change the values.
140Sigor@sysoev.ru  */
150Sigor@sysoev.ru typedef struct {
160Sigor@sysoev.ru     void                *context;
170Sigor@sysoev.ru     nxt_work_handler_t  filter;
180Sigor@sysoev.ru } nxt_source_hook_t;
190Sigor@sysoev.ru 
200Sigor@sysoev.ru 
210Sigor@sysoev.ru typedef void (*nxt_source_handler_t)(void *source_context,
220Sigor@sysoev.ru     nxt_source_hook_t *query);
230Sigor@sysoev.ru 
240Sigor@sysoev.ru 
25*2084Salx.manpages@gmail.com #define nxt_source_filter(thr, wq, task, next, out)                           \
260Sigor@sysoev.ru     do {                                                                      \
270Sigor@sysoev.ru         if (thr->engine->batch != 0) {                                        \
280Sigor@sysoev.ru             nxt_thread_work_queue_add(thr, wq, nxt_source_filter_handler,     \
291Sigor@sysoev.ru                                       task, next, out);                       \
300Sigor@sysoev.ru                                                                               \
310Sigor@sysoev.ru         } else {                                                              \
321Sigor@sysoev.ru             (next)->filter(task, (next)->context, out);                       \
330Sigor@sysoev.ru         }                                                                     \
340Sigor@sysoev.ru                                                                               \
350Sigor@sysoev.ru     } while (0)
360Sigor@sysoev.ru 
370Sigor@sysoev.ru 
381Sigor@sysoev.ru NXT_EXPORT void nxt_source_filter_handler(nxt_task_t *task, void *obj,
390Sigor@sysoev.ru     void *data);
400Sigor@sysoev.ru 
410Sigor@sysoev.ru 
420Sigor@sysoev.ru #endif /* _NXT_SOURCE_H_INCLUDED_ */
43