[MAJOR] replaced rbtree with ul2tree.
The rbtree-based wait queue consumes a lot of CPU. Use the ul2tree
instead. Lots of cleanups and code reorganizations made it possible
to reduce the task struct and simplify the code a bit.
diff --git a/src/backend.c b/src/backend.c
index 0eb97ed..f096874 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -572,7 +572,7 @@
* we have to inform the server that it may be used by another session.
*/
if (may_dequeue_tasks(t->srv, t->be))
- task_wakeup(&rq, t->srv->queue_mgt);
+ task_wakeup(t->srv->queue_mgt);
return 1;
}
return 0;
@@ -611,7 +611,7 @@
t->be->failed_conns++;
/* release other sessions waiting for this server */
if (may_dequeue_tasks(t->srv, t->be))
- task_wakeup(&rq, t->srv->queue_mgt);
+ task_wakeup(t->srv->queue_mgt);
return 1;
}
/* ensure that we have enough retries left */
@@ -625,7 +625,7 @@
*/
/* let's try to offer this slot to anybody */
if (may_dequeue_tasks(t->srv, t->be))
- task_wakeup(&rq, t->srv->queue_mgt);
+ task_wakeup(t->srv->queue_mgt);
if (t->srv)
t->srv->failed_conns++;
@@ -691,7 +691,7 @@
/* release other sessions waiting for this server */
if (may_dequeue_tasks(t->srv, t->be))
- task_wakeup(&rq, t->srv->queue_mgt);
+ task_wakeup(t->srv->queue_mgt);
return 1;
}
/* if we get here, it's because we got SRV_STATUS_OK, which also