(setf (car queue)
(rest (car queue)))))))
+(defmethod dequeue-all ((q locked-queue))
+ (with-slots (queue mutex waitq) q
+ (with-mutex (mutex)
+ (if (or (null queue)
+ (null (first queue)))
+ (condition-wait waitq mutex))
+ (loop
+ until (null (car queue))
+ collect (car (car queue))
+ do (setf (car queue) (rest (car queue)))))))
+
(defmethod enqueue ((q locked-queue) value)
(with-slots (queue mutex waitq) q
(with-mutex (mutex)
(setf queue (cons last last))
(condition-notify waitq))
(progn
- (setf (rest (cdr queue))
- last
+ (setf (rest (cdr queue)) last
(cdr queue) last)
(cons (car queue) last)))))))