mirror of
https://github.com/clearlinux/uwsgi.git
synced 2026-09-08 06:31:58 +00:00
added iterations to uwsgi.add_rb_timer()
This commit is contained in:
@@ -19,8 +19,11 @@ void expire_rb_timeouts(struct rb_root *root) {
|
||||
usrbt = (struct uwsgi_signal_rb_timer *) urbt->data;
|
||||
rb_erase(&usrbt->uwsgi_rb_timer->rbt, root);
|
||||
free(usrbt->uwsgi_rb_timer);
|
||||
usrbt->iterations_done++;
|
||||
uwsgi_route_signal(usrbt->sig);
|
||||
usrbt->uwsgi_rb_timer = uwsgi_add_rb_timer(root, time(NULL) + usrbt->value, usrbt);
|
||||
if (!usrbt->iterations || usrbt->iterations_done < usrbt->iterations) {
|
||||
usrbt->uwsgi_rb_timer = uwsgi_add_rb_timer(root, time(NULL) + usrbt->value, usrbt);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -201,12 +201,13 @@ PyObject *py_uwsgi_add_rb_timer(PyObject * self, PyObject * args) {
|
||||
|
||||
uint8_t uwsgi_signal;
|
||||
int secs;
|
||||
int iterations = 0;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "Bi:add_rb_timer", &uwsgi_signal, &secs)) {
|
||||
if (!PyArg_ParseTuple(args, "Bi|i:add_rb_timer", &uwsgi_signal, &secs, &iterations)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (uwsgi_signal_add_rb_timer(uwsgi_signal, secs))
|
||||
if (uwsgi_signal_add_rb_timer(uwsgi_signal, secs, iterations))
|
||||
return PyErr_Format(PyExc_ValueError, "unable to add rb_timer");
|
||||
|
||||
Py_INCREF(Py_None);
|
||||
|
||||
@@ -91,7 +91,7 @@ int uwsgi_add_timer(uint8_t sig, int secs) {
|
||||
|
||||
}
|
||||
|
||||
int uwsgi_signal_add_rb_timer(uint8_t sig, int secs) {
|
||||
int uwsgi_signal_add_rb_timer(uint8_t sig, int secs, int iterations) {
|
||||
|
||||
uwsgi_lock(uwsgi.rb_timer_table_lock);
|
||||
|
||||
@@ -100,6 +100,8 @@ int uwsgi_signal_add_rb_timer(uint8_t sig, int secs) {
|
||||
// fill the timer table, the master will use it to add items to the event queue
|
||||
ushared->rb_timers[ushared->rb_timers_cnt].value = secs;
|
||||
ushared->rb_timers[ushared->rb_timers_cnt].registered = 0;
|
||||
ushared->rb_timers[ushared->rb_timers_cnt].iterations = iterations;
|
||||
ushared->rb_timers[ushared->rb_timers_cnt].iterations_done = 0;
|
||||
ushared->rb_timers[ushared->rb_timers_cnt].sig = sig;
|
||||
ushared->rb_timers_cnt++;
|
||||
}
|
||||
|
||||
@@ -682,6 +682,8 @@ struct uwsgi_timer {
|
||||
struct uwsgi_signal_rb_timer {
|
||||
int value;
|
||||
int registered;
|
||||
int iterations;
|
||||
int iterations_done;
|
||||
uint8_t sig;
|
||||
struct uwsgi_rb_timer *uwsgi_rb_timer;
|
||||
};
|
||||
@@ -1421,7 +1423,7 @@ void *uwsgi_mmap_shared_rwlock(void);
|
||||
int uwsgi_register_signal(uint8_t, char *, void *, uint8_t);
|
||||
int uwsgi_add_file_monitor(uint8_t, char *);
|
||||
int uwsgi_add_timer(uint8_t, int);
|
||||
int uwsgi_signal_add_rb_timer(uint8_t, int);
|
||||
int uwsgi_signal_add_rb_timer(uint8_t, int, int);
|
||||
int uwsgi_signal_handler(uint8_t);
|
||||
|
||||
void uwsgi_route_signal(uint8_t);
|
||||
|
||||
Reference in New Issue
Block a user