added iterations to uwsgi.add_rb_timer()

This commit is contained in:
roberto@sirius
2011-02-24 10:50:52 +01:00
parent 28c14f4d8c
commit 67b22ff796
4 changed files with 13 additions and 5 deletions
+4 -1
View File
@@ -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;
}
+3 -2
View File
@@ -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);
+3 -1
View File
@@ -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++;
}
+3 -1
View File
@@ -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);