Coverage Report

Created: 2025-08-28 06:50

/src/unit/src/nxt_timer.h
Line
Count
Source (jump to first uncovered line)
1
2
/*
3
 * Copyright (C) Igor Sysoev
4
 * Copyright (C) NGINX, Inc.
5
 */
6
7
#ifndef _NXT_TIMER_H_INCLUDED_
8
#define _NXT_TIMER_H_INCLUDED_
9
10
11
/* Valid values are between 0ms to 255ms. */
12
0
#define NXT_TIMER_DEFAULT_BIAS  50
13
//#define NXT_TIMER_DEFAULT_BIAS  0
14
15
16
/*
17
 * The nxt_timer_t structure can hold up to 14 bits of change index,
18
 * but 0 reserved for NXT_TIMER_NO_CHANGE.
19
 */
20
0
#define NXT_TIMER_MAX_CHANGES  16383
21
0
#define NXT_TIMER_NO_CHANGE    0
22
23
24
typedef struct {
25
    /* The rbtree node must be the first field. */
26
    NXT_RBTREE_NODE           (node);
27
28
    uint8_t                   bias;
29
30
    uint16_t                  change:14;
31
    uint16_t                  enabled:1;
32
    uint16_t                  queued:1;
33
34
    nxt_msec_t                time;
35
36
    nxt_work_queue_t          *work_queue;
37
    nxt_work_handler_t        handler;
38
39
    nxt_task_t                *task;
40
    nxt_log_t                 *log;
41
} nxt_timer_t;
42
43
44
0
#define NXT_TIMER             { NXT_RBTREE_NODE_INIT, 0, NXT_TIMER_NO_CHANGE, \
45
0
                                0, 0, 0, NULL, NULL, NULL, NULL }
46
47
48
typedef enum {
49
    NXT_TIMER_NOPE = 0,
50
    NXT_TIMER_ADD,
51
    NXT_TIMER_DELETE,
52
} nxt_timer_operation_t;
53
54
55
typedef struct {
56
    nxt_timer_operation_t     change:8;
57
    nxt_msec_t                time;
58
    nxt_timer_t               *timer;
59
} nxt_timer_change_t;
60
61
62
typedef struct {
63
    nxt_rbtree_t              tree;
64
65
    /* An overflown milliseconds counter. */
66
    nxt_msec_t                now;
67
    nxt_msec_t                minimum;
68
69
    nxt_uint_t                mchanges;
70
    nxt_uint_t                nchanges;
71
72
    nxt_timer_change_t        *changes;
73
} nxt_timers_t;
74
75
76
#define nxt_timer_data(obj, type, timer)                                      \
77
0
    nxt_container_of(obj, type, timer)
78
79
80
/*
81
 * When timer resides in rbtree all links of its node are not NULL.
82
 * A parent link is the nearst to other timer flags.
83
 */
84
85
#define nxt_timer_is_in_tree(timer)                                           \
86
0
    ((timer)->node.parent != NULL)
87
88
#define nxt_timer_in_tree_set(timer)
89
    /* Noop, because rbtree insertion sets a node's parent link. */
90
91
#define nxt_timer_in_tree_clear(timer)                                        \
92
0
    (timer)->node.parent = NULL
93
94
95
nxt_int_t nxt_timers_init(nxt_timers_t *timers, nxt_uint_t mchanges);
96
nxt_msec_t nxt_timer_find(nxt_event_engine_t *engine);
97
void nxt_timer_expire(nxt_event_engine_t *engine, nxt_msec_t now);
98
99
NXT_EXPORT void nxt_timer_add(nxt_event_engine_t *engine, nxt_timer_t *timer,
100
    nxt_msec_t timeout);
101
NXT_EXPORT nxt_bool_t nxt_timer_delete(nxt_event_engine_t *engine,
102
    nxt_timer_t *timer);
103
104
nxt_inline void
105
nxt_timer_disable(nxt_event_engine_t *engine, nxt_timer_t *timer)
106
0
{
107
0
    nxt_debug(timer->task, "timer disable: %M", timer->time);
108
109
0
    timer->enabled = 0;
110
0
}
Unexecuted instantiation: nxt_json_fuzz.c:nxt_timer_disable
Unexecuted instantiation: nxt_lib.c:nxt_timer_disable
Unexecuted instantiation: nxt_errno.c:nxt_timer_disable
Unexecuted instantiation: nxt_malloc.c:nxt_timer_disable
Unexecuted instantiation: nxt_file.c:nxt_timer_disable
Unexecuted instantiation: nxt_process.c:nxt_timer_disable
Unexecuted instantiation: nxt_process_title.c:nxt_timer_disable
Unexecuted instantiation: nxt_port_socket.c:nxt_timer_disable
Unexecuted instantiation: nxt_port_memory.c:nxt_timer_disable
Unexecuted instantiation: nxt_port_rpc.c:nxt_timer_disable
Unexecuted instantiation: nxt_port.c:nxt_timer_disable
Unexecuted instantiation: nxt_random.c:nxt_timer_disable
Unexecuted instantiation: nxt_mp.c:nxt_timer_disable
Unexecuted instantiation: nxt_string.c:nxt_timer_disable
Unexecuted instantiation: nxt_sprintf.c:nxt_timer_disable
Unexecuted instantiation: nxt_log.c:nxt_timer_disable
Unexecuted instantiation: nxt_murmur_hash.c:nxt_timer_disable
Unexecuted instantiation: nxt_lvlhsh.c:nxt_timer_disable
Unexecuted instantiation: nxt_array.c:nxt_timer_disable
Unexecuted instantiation: nxt_buf.c:nxt_timer_disable
Unexecuted instantiation: nxt_sendbuf.c:nxt_timer_disable
Unexecuted instantiation: nxt_thread.c:nxt_timer_disable
Unexecuted instantiation: nxt_thread_mutex.c:nxt_timer_disable
Unexecuted instantiation: nxt_spinlock.c:nxt_timer_disable
Unexecuted instantiation: nxt_thread_time.c:nxt_timer_disable
Unexecuted instantiation: nxt_work_queue.c:nxt_timer_disable
Unexecuted instantiation: nxt_service.c:nxt_timer_disable
Unexecuted instantiation: nxt_log_moderation.c:nxt_timer_disable
Unexecuted instantiation: nxt_event_engine.c:nxt_timer_disable
Unexecuted instantiation: nxt_timer.c:nxt_timer_disable
Unexecuted instantiation: nxt_runtime.c:nxt_timer_disable
Unexecuted instantiation: nxt_conf.c:nxt_timer_disable
Unexecuted instantiation: nxt_conf_validation.c:nxt_timer_disable
Unexecuted instantiation: nxt_main_process.c:nxt_timer_disable
Unexecuted instantiation: nxt_signal_handlers.c:nxt_timer_disable
Unexecuted instantiation: nxt_controller.c:nxt_timer_disable
Unexecuted instantiation: nxt_router.c:nxt_timer_disable
Unexecuted instantiation: nxt_router_access_log.c:nxt_timer_disable
Unexecuted instantiation: nxt_h1proto.c:nxt_timer_disable
Unexecuted instantiation: nxt_status.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_request.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_response.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_error.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_route.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_route_addr.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_rewrite.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_set_headers.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_return.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_static.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_proxy.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_chunk_parse.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_variables.c:nxt_timer_disable
Unexecuted instantiation: nxt_application.c:nxt_timer_disable
Unexecuted instantiation: nxt_external.c:nxt_timer_disable
Unexecuted instantiation: nxt_port_hash.c:nxt_timer_disable
Unexecuted instantiation: nxt_websocket_accept.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_websocket.c:nxt_timer_disable
Unexecuted instantiation: nxt_h1proto_websocket.c:nxt_timer_disable
Unexecuted instantiation: nxt_fs.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_compression.c:nxt_timer_disable
Unexecuted instantiation: nxt_epoll_engine.c:nxt_timer_disable
Unexecuted instantiation: nxt_poll_engine.c:nxt_timer_disable
Unexecuted instantiation: nxt_select_engine.c:nxt_timer_disable
Unexecuted instantiation: nxt_linux_sendfile.c:nxt_timer_disable
Unexecuted instantiation: nxt_clone.c:nxt_timer_disable
Unexecuted instantiation: nxt_gmtime.c:nxt_timer_disable
Unexecuted instantiation: nxt_time.c:nxt_timer_disable
Unexecuted instantiation: nxt_mem_map.c:nxt_timer_disable
Unexecuted instantiation: nxt_socket.c:nxt_timer_disable
Unexecuted instantiation: nxt_socketpair.c:nxt_timer_disable
Unexecuted instantiation: nxt_socket_msg.c:nxt_timer_disable
Unexecuted instantiation: nxt_credential.c:nxt_timer_disable
Unexecuted instantiation: nxt_isolation.c:nxt_timer_disable
Unexecuted instantiation: nxt_signal.c:nxt_timer_disable
Unexecuted instantiation: nxt_rbtree.c:nxt_timer_disable
Unexecuted instantiation: nxt_utf8.c:nxt_timer_disable
Unexecuted instantiation: nxt_parse.c:nxt_timer_disable
Unexecuted instantiation: nxt_var.c:nxt_timer_disable
Unexecuted instantiation: nxt_tstr.c:nxt_timer_disable
Unexecuted instantiation: nxt_file_name.c:nxt_timer_disable
Unexecuted instantiation: nxt_djb_hash.c:nxt_timer_disable
Unexecuted instantiation: nxt_list.c:nxt_timer_disable
Unexecuted instantiation: nxt_thread_pool.c:nxt_timer_disable
Unexecuted instantiation: nxt_conn.c:nxt_timer_disable
Unexecuted instantiation: nxt_conn_connect.c:nxt_timer_disable
Unexecuted instantiation: nxt_conn_accept.c:nxt_timer_disable
Unexecuted instantiation: nxt_conn_read.c:nxt_timer_disable
Unexecuted instantiation: nxt_conn_write.c:nxt_timer_disable
Unexecuted instantiation: nxt_conn_close.c:nxt_timer_disable
Unexecuted instantiation: nxt_sockaddr.c:nxt_timer_disable
Unexecuted instantiation: nxt_listen_socket.c:nxt_timer_disable
Unexecuted instantiation: nxt_upstream.c:nxt_timer_disable
Unexecuted instantiation: nxt_upstream_round_robin.c:nxt_timer_disable
Unexecuted instantiation: nxt_http_parse.c:nxt_timer_disable
Unexecuted instantiation: nxt_capability.c:nxt_timer_disable
Unexecuted instantiation: nxt_sha1.c:nxt_timer_disable
Unexecuted instantiation: nxt_websocket.c:nxt_timer_disable
Unexecuted instantiation: nxt_fs_mount.c:nxt_timer_disable
Unexecuted instantiation: nxt_recvbuf.c:nxt_timer_disable
Unexecuted instantiation: nxt_semaphore.c:nxt_timer_disable
111
112
113
#endif /* _NXT_TIMER_H_INCLUDED_ */