1use core::ptr;
2
3use crate::{
4 ngx_current_msec, ngx_event_t, ngx_event_timer_rbtree, ngx_msec_t, ngx_queue_insert_before, ngx_queue_remove,
5 ngx_queue_t, ngx_rbtree_delete, ngx_rbtree_insert, NGX_TIMER_LAZY_DELAY,
6};
7
8#[inline]
14pub unsafe fn ngx_add_timer(ev: *mut ngx_event_t, timer: ngx_msec_t) {
15 let key: ngx_msec_t = ngx_current_msec.wrapping_add(timer);
16
17 if (*ev).timer_set() != 0 {
18 if key.abs_diff((*ev).timer.key) < NGX_TIMER_LAZY_DELAY as _ {
24 return;
25 }
26
27 ngx_del_timer(ev);
28 }
29
30 (*ev).timer.key = key;
31
32 ngx_rbtree_insert(
33 ptr::addr_of_mut!(ngx_event_timer_rbtree),
34 ptr::addr_of_mut!((*ev).timer),
35 );
36
37 (*ev).set_timer_set(1);
38}
39
40#[inline]
46pub unsafe fn ngx_del_timer(ev: *mut ngx_event_t) {
47 ngx_rbtree_delete(
48 ptr::addr_of_mut!(ngx_event_timer_rbtree),
49 ptr::addr_of_mut!((*ev).timer),
50 );
51
52 (*ev).timer.left = ptr::null_mut();
53 (*ev).timer.right = ptr::null_mut();
54 (*ev).timer.parent = ptr::null_mut();
55
56 (*ev).set_timer_set(0);
57}
58
59#[inline]
66pub unsafe fn ngx_post_event(ev: *mut ngx_event_t, q: *mut ngx_queue_t) {
67 if (*ev).posted() == 0 {
68 (*ev).set_posted(1);
69 ngx_queue_insert_before(q, ptr::addr_of_mut!((*ev).queue));
70 }
71}
72
73#[inline]
80pub unsafe fn ngx_delete_posted_event(ev: *mut ngx_event_t) {
81 (*ev).set_posted(0);
82 ngx_queue_remove(ptr::addr_of_mut!((*ev).queue));
83}