Changeset 5896:3efdd7788bb0 in nginx


Ignore:
Timestamp:
08/13/14 18:45:04 (3 years ago)
Author:
Valentin Bartenev <vbart@…>
Branch:
default
Message:

Events: introduced cancelable timers.

Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/event/ngx_event.h

    r5821 r5896  
    137137    unsigned         resolver:1;
    138138
     139    unsigned         cancelable:1;
     140
    139141
    140142#if 0
  • src/event/ngx_event_timer.c

    r5895 r5896  
    9595    }
    9696}
     97
     98
     99void
     100ngx_event_cancel_timers(void)
     101{
     102    ngx_event_t        *ev;
     103    ngx_rbtree_node_t  *node, *root, *sentinel;
     104
     105    sentinel = ngx_event_timer_rbtree.sentinel;
     106
     107    for ( ;; ) {
     108        root = ngx_event_timer_rbtree.root;
     109
     110        if (root == sentinel) {
     111            return;
     112        }
     113
     114        node = ngx_rbtree_min(root, sentinel);
     115
     116        ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
     117
     118        if (!ev->cancelable) {
     119            return;
     120        }
     121
     122        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
     123                       "event timer cancel: %d: %M",
     124                       ngx_event_ident(ev->data), ev->timer.key);
     125
     126        ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer);
     127
     128#if (NGX_DEBUG)
     129        ev->timer.left = NULL;
     130        ev->timer.right = NULL;
     131        ev->timer.parent = NULL;
     132#endif
     133
     134        ev->timer_set = 0;
     135
     136        ev->handler(ev);
     137    }
     138}
  • src/event/ngx_event_timer.h

    r5894 r5896  
    2323ngx_msec_t ngx_event_find_timer(void);
    2424void ngx_event_expire_timers(void);
     25void ngx_event_cancel_timers(void);
    2526
    2627
  • src/os/unix/ngx_process_cycle.c

    r5894 r5896  
    810810            }
    811811
     812            ngx_event_cancel_timers();
     813
    812814            if (ngx_event_timer_rbtree.root == ngx_event_timer_rbtree.sentinel)
    813815            {
  • src/os/win32/ngx_process_cycle.c

    r5633 r5896  
    822822            }
    823823
     824            ngx_event_cancel_timers();
     825
    824826            if (ngx_event_timer_rbtree.root
    825827                == ngx_event_timer_rbtree.sentinel)
Note: See TracChangeset for help on using the changeset viewer.