Reading a line from *query-io* two makes the next read-line return an empty string. Tested under cmucl/sbcl-mt with sigio/spawn.
(defun foo () (list (read-line *query-io*) (read-line *query-io*) (read-line *query-io*)))
CL-USER> (foo) 1 2 ("1" "" "2")
Gabor