@@ -36,11 +36,15 @@ db)) (define (portlogger:open-run-close proc . params) (handle-exceptions exn - (print "ERROR: portlogger:open-run-close failed. " proc " " params) + (begin + (debug:print 0 "ERROR: portlogger:open-run-close failed. " proc " " params) + (debug:print 0 " message: " ((condition-property-accessor 'exn 'message) exn)) + (debug:print 0 "exn=" (condition->list exn)) + (print-call-chain)) (let* ((db (portlogger:open-db (conc "/tmp/." (current-user-name) "-portlogger.db"))) (res (apply proc db params))) (sqlite3:finalize! db) res))) @@ -80,10 +84,17 @@ (lambda (var curr) (or curr var curr)) #f db "SELECT (port) FROM ports WHERE state='released' LIMIT 1;")) + +(define (portlogger:find-port db) + (let ((portnum (or (portlogger:get-prev-used-port db) + (+ 50000 ;; top of registered ports + (random (- 60000 50000)))))) + (portlogger:take-port db portnum) + portnum)) ;; set port to "released", "failed" etc. ;; (define (portlogger:set-port db portnum value) (sqlite3:execute db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;" value portnum))