summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob.kreuze@us.af.mil>2022-11-18 21:33:24 -0500
committerJakob L. Kreuze <zerodaysfordays@sdf.org>2022-11-19 12:27:24 -0500
commitbb30b8257b15688070f21ddcc04752699e60a3ba (patch)
tree3f7816dc2f76eed50bca4b1b4e31795654637f0d
parent7809dbf1001f67cf6dacb50a105d0752184ba0f5 (diff)
[dynamic] Refactor queue operations
-rw-r--r--haunt/jakob/dynamic/captcha.scm52
1 files changed, 25 insertions, 27 deletions
diff --git a/haunt/jakob/dynamic/captcha.scm b/haunt/jakob/dynamic/captcha.scm
index faa6006..2e185d3 100644
--- a/haunt/jakob/dynamic/captcha.scm
+++ b/haunt/jakob/dynamic/captcha.scm
@@ -50,6 +50,25 @@
(define (make-queue n)
(make-id-queue (make-mutex) (iota n) (list)))
+(define (append-to-free-queue! id queue)
+ (set-id-queue-free!
+ queue
+ (append! (id-queue-free queue) (list id))))
+
+(define (remove-from-free-queue! id queue)
+ (set-id-queue-free! queue (delete! id (id-queue-free queue))))
+
+(define (append-to-allocated-queue! id queue)
+ (set-id-queue-allocated!
+ queue
+ (append! (id-queue-allocated queue) (list (list id (current-time))))))
+
+(define (remove-from-allocated-queue! id queue)
+ (set-id-queue-allocated!
+ queue
+ (filter! (lambda (x) (not (equal? id (car x))))
+ (id-queue-allocated queue))))
+
(define max-challenges 1024)
(define min-free-id-threshold 32)
(define time-to-live-seconds (* 20 60))
@@ -57,47 +76,26 @@
(define (release-id! id queue)
(with-mutex (id-queue-mutex queue)
- (display (id-queue-allocated queue))
- (newline)
- (display (find (lambda (x) (equal? id (car x))) (id-queue-allocated queue)))
- (newline)
(assert (find (lambda (x) (equal? id (car x))) (id-queue-allocated queue)))
(assert (not (member id (id-queue-free queue))))
- (set-id-queue-free!
- queue
- (append! (id-queue-free queue) (list id)))
- (set-id-queue-allocated!
- queue
- (filter! (lambda (x) (not (equal? id (car x))))
- (id-queue-allocated queue)))))
+ (append-to-free-queue! id queue)
+ (remove-from-allocated-queue! id queue)))
(define (dequeue-id! queue)
(with-mutex (id-queue-mutex queue)
(when (< (length (id-queue-free queue)) min-free-id-threshold)
(for-each
(match-lambda
- ((cons id created-time)
+ ((id created-time)
(when (>= (- (time-second (current-time))
(time-second created-time))
time-to-live-seconds)
- (assert (not (member id (id-queue-free queue))))
- (set-id-queue-free!
- queue
- (append! (id-queue-free queue) (list id)))
- (set-id-queue-allocated!
- queue
- (filter! (lambda (x) (not (equal? id (car x))))
- (id-queue-allocated queue))))))
+ (remove-from-allocated-queue! id queue))))
(list-copy (id-queue-allocated queue))))
(let* ((n (random (length (id-queue-free queue))))
(id (list-ref (id-queue-free queue) n)))
- (set-id-queue-free!
- queue
- (delete! id (id-queue-free queue)))
- (set-id-queue-allocated!
- queue
- (append! (id-queue-allocated queue)
- (list (cons id (current-time)))))
+ (remove-from-free-queue! id queue)
+ (append-to-allocated-queue! id queue)
id)))