-void terminate_idle_sessions(void) {
- struct CitContext *ccptr;
- time_t now;
-
- time(&now);
- for (ccptr = ContextList; ccptr != NULL; ccptr = ccptr->next) {
- if ( (ccptr!=CC)
- && (config.c_sleeping > 0)
- && (now - (ccptr->lastcmd) > config.c_sleeping) ) {
- lprintf(3, "Session %d timed out\n", ccptr->cs_pid);
- kill_session(ccptr->cs_pid);
- ccptr = ContextList;
- }
+void check_ref_counts_backend(struct ctdlroom *qrbuf, void *data) {
+
+ int *new_refcounts;
+
+ new_refcounts = (int *) data;
+
+ ++new_refcounts[(int)qrbuf->QRfloor];
+}
+
+
+void check_ref_counts(void) {
+ struct floor flbuf;
+ int a;
+
+ int new_refcounts[MAXFLOORS];
+
+ syslog(LOG_DEBUG, "housekeeping: checking floor reference counts");
+ for (a=0; a<MAXFLOORS; ++a) {
+ new_refcounts[a] = 0;
+ }
+
+ cdb_begin_transaction();
+ CtdlForEachRoom(check_ref_counts_backend, (void *)new_refcounts );
+ cdb_end_transaction();
+
+ for (a=0; a<MAXFLOORS; ++a) {
+ lgetfloor(&flbuf, a);
+ flbuf.f_ref_count = new_refcounts[a];
+ if (new_refcounts[a] > 0) {
+ flbuf.f_flags = flbuf.f_flags | QR_INUSE;