/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_ */ |