Index: rmt.scm
==================================================================
--- rmt.scm
+++ rmt.scm
@@ -54,18 +54,39 @@
 		  (client:setup areapath)
 		  #f))))
 
 (define *send-receive-mutex* (make-mutex)) ;; should have separate mutex per run-id
 
+(define *rmt-query-last-call-time* 0)
+(define *rmt-query-last-rest-time* 0) ;; last time there was at least a 1/2 second rest - giving other processes access to the db
+
+;; NOTE: This query rest algorythm will not adapt to long query times. REDESIGN NEEDED. TODO. FIXME.
+;;
+(define (rmt:query-rest)
+  (let* ((now (current-milliseconds)))
+    (cond
+     ((> (- now *rmt-query-last-call-time*) 500)  ;; it's been a while since last query - no need to rest
+      (set! *rmt-query-last-rest-time*  now)
+      (set! *rmt-query-last-call-time*  now))
+     ((> (- now *rmt-query-last-rest-time*) 5000) ;; no natural rests have happened
+      (debug:print 0 *default-log-port* "query rest needed. blocking for 1/2 second.")
+      (thread-sleep! 0.5) ;; force a rest of a half second
+      (set! *rmt-query-last-rest-time* now)
+      (set! *rmt-query-last-call-time* now))
+     (else ;; sufficient rests have occurred, just record the last query time
+      (set! *rmt-query-last-call-time* now)))))
+
 ;; RA => e.g. usage (rmt:send-receive 'get-var #f (list varname))
 ;;
 (define (rmt:send-receive cmd rid params #!key (attemptnum 1)(area-dat #f)) ;; start attemptnum at 1 so the modulo below works as expected
 
   #;(common:telemetry-log (conc "rmt:"(->string cmd))
                         payload: `((rid . ,rid)
                                    (params . ,params)))
-                          
+  (if (not (equal? (configf:lookup *configdat* "setup" "query-rest") "no"))
+      (rmt:query-rest))
+  
   (if (> attemptnum 2)
       (debug:print 0 *default-log-port* "INFO: attemptnum in rmt:send-receive is " attemptnum))
     
   (cond
    ((> attemptnum 2) (thread-sleep! 0.05))