Commit 8e0d776a authored by David Kågedal's avatar David Kågedal

La in Inges prefetch.el och anpassad resten efter det.

parent 61b846bf
Sun Sep 29 15:21:36 1996 David Kgedal <davidk@lysator.liu.se>
* view-text.el (lyskom-view-text): Prefetcha inlggstrdet.
* startup.el (lyskom): Anropa lyskom-setup-prefetch.
(lyskom-refetch): Anpassa till nya prefetchen.
* prefetch.el (lyskom-inhibit-prefetch): Ny variabel.
(lyskom-setup-prefetch): Stt lyskom-membership-is-read till 0.
(lyskom-prefetch-membership): ...istllet fr hr.
(lyskom-prefetch-map): Ta membership som parameter.
(lyskom-prefetch-map-using-conf-stat): Dito.
(lyskom-prefetch-all-conf-texts): Ny funktion (som inte anvnds).
(lyskom-prefetch-conf-texts): Dito.
(lyskom-continue-prefetch): Anvnd lyskom-inibit-prefetch fr att
frhindra rekursion.
(lyskom-prefetch-one-item): Prefetcha alla texter nr hela
medlemsskapslistan r inlst. Dett r dock bortkopplat just nu,
eftersom det strular.
(lyskom-prefetch-one-request): Skicka med membership-argumentet
vid CONFSTATFORMAP och MAP.
(lyskom-prefetch-membership-handler): Testa om medlemsskapet r
synligt.
(lyskom-prefetch-confstatformap-handler): Ta och skicka
membership.
(lyskom-prefetch-map-handler): Dito. Och gr inte listify-vector i
ondan. Uppdatera prompten.
* lyskom-rest.el (lyskom-what-to-do): Nytt test fr nr
medlemskapet r inlst.
(lyskom-prefetch-and-print-prompt): Gr ingen prefetch. Funktionen
borde byta namn, eller frsvinna.
(lyskom-prefetch-all-confs): Gr ingenting. Detta fr "Lista
nyheter" att bete sig lite lustigt i inledningefasen.
(lyskom-prefetch-all-confs): Anvnd nya prefetchen.
(lyskom-prefetch-conf,lyskom-prefetch-done)
(lyskom-prefetch-handle-conf,lyskom-prefetch-handle-map)
(lyskom-conf-fetched-p,lyskom-prefetch-text)
(lyskom-prefetch-from-rlist,lyskom-prefetch-from-list)
(lyskom-prefetch-comment-stats): Bortkommenterade.
* internal.el (lyskom-apply-handler,lysom-apply-multi-hander)
(lyskom-apply-multi-list-handler): Bind inte inhibit-quit till
nil.
* async.el (lyskom-add-new-text): Anpassad till nya prefetchen.
* Makefile (PARTS-EL): La till prefetch.el
* En hel del ndringar i prefetch-koden gjordes tidigare, men jag
skriver in den i ChangeLog nu.
Fri Sep 27 01:47:13 1996 David Kgedal <davidk@lysator.liu.se>
* commands1.el (lyskom-add-membership): Anvnd prefetch fr att
hmta mappen istllet.
Thu Sep 26 00:08:32 1996 David Kgedal <davidk@lysator.liu.se>
* lyskom-rest.el (lyskom-end-of-command): Se till att de saker som
skrivs ut innan prompten brjar en ny rad.
* services.el (blocking-do): Strunta i att fnga quit.
* macros.el (def-kom-command): Fnga quit, och skriv ut "Kommandot
avbrutet".
* parse.el (lyskom-parse-unparsed): Bind inte inhibit-quit till
nil.
* lyskom-rest.el (lyskom-filter): Testa om quit-flag r satt nr
funktionen avslutas, och stt i s fall lyskom-quit-flag.
* internal.el (lyskom-apply-handler): Bind inte inhibit-quit till
nil.
(lyskom-apply-multi-handler): Dito.
(lyskom-apply-multi-list-handler): Dito.
* reading.el (lyskom-enter-map-in-to-do-list): Anvnd
lyskom-list-unread.
Wed Sep 25 13:32:48 1996 David Kgedal <davidk@lysator.liu.se>
* clienttypes.el (read-list-enter-read-info): Om mtet redan fanns
med i rlist, lgg till texterna p slutet i den read-infon
istllet fr att lgga till den nya read-infon separat.
(read-info-append-text-list): Ny funktion.
(read-info-enter-text-last): Ny funktion.
(read-list-enter-text): Anvnd den.
Wed Sep 25 12:14:48 1996 David Byers <davby@sen2.ida.liu.se>
* english-strings.el, swedish-strings.el (lyskom-strings): Anvnd
......
......@@ -51,6 +51,7 @@ PARTS-EL = komtypes.el clienttypes.el deferred-insert.el utilities.el \
view-text.el async.el completing-read.el \
prioritize.el flags.el messages.el ansaphone.el remote-control.el \
slow.el \
prefetch.el \
elib-string.el \
lyskom-rest.el
HEADER-EL = vars.el macros.el
......@@ -67,7 +68,7 @@ SRC-ELC = komtypes.elc clienttypes.elc deferred-insert.elc utilities.elc \
filter.elc filter-edit.elc lyskom-buttons.elc \
view-text.elc async.elc completing-read.elc \
prioritize.elc flags.elc messages.elc ansaphone.elc \
remote-control.elc slow.elc elib-string.elc \
remote-control.elc slow.elc prefetch.elc elib-string.elc \
lyskom-rest.elc
PARTS-ELC = $(SRC-ELC)
......
......@@ -3,6 +3,11 @@ Att g
Buggar
Lista nyheter visar fel innan prefetchen har hämtat alla mappar.
Efter återse senaste fick jag fel prompt. Jag vill ha återse
nästa-prompten direkt om det finns texter som matchar villkoret.
lyskom-read-session-no hanterar inte att man anger specifikt
sessionsnummer om samma person har flera sessioner, tror jag.
Problemet är att s xxxx hanteras i lyskom-read-conf-internal som
......
......@@ -479,20 +479,27 @@ In that case, just discard this call."
;; Update the read-lists.
(if (and (lyskom-conf-fetched-p (conf-stat->conf-no recipient))
(lyskom-visible-membership
(lyskom-member-p (conf-stat->conf-no recipient)))
(not (read-list-enter-text text-no recipient lyskom-to-do-list)))
;; If we have already read all texts in the conference...
(let ((info (lyskom-create-read-info
'CONF
recipient
(membership->priority
(lyskom-member-p (conf-stat->conf-no recipient)))
(lyskom-create-text-list (list text-no)))))
(read-list-enter-read-info info lyskom-to-do-list)
(if (= lyskom-current-conf (conf-stat->conf-no recipient))
(read-list-enter-first info lyskom-reading-list))))
;; Prefetch thoughts:
;; We need a way to check if a conferences is fetched.
;; davidk /960924
(let ((member (lyskom-member-p (conf-stat->conf-no recipient))))
(if (and member
;; (lyskom-conf-fetched-p (conf-stat->conf-no recipient))
(lyskom-visible-membership member)
(not (read-list-enter-text text-no recipient
lyskom-to-do-list)))
;; If we have already read all texts in the conference or the
;; text has not been prefetched
(let ((info (lyskom-create-read-info
'CONF
recipient
(membership->priority
(lyskom-member-p (conf-stat->conf-no recipient)))
(lyskom-create-text-list (list text-no)))))
(read-list-enter-read-info info lyskom-to-do-list)
(if (= lyskom-current-conf (conf-stat->conf-no recipient))
(read-list-enter-first info lyskom-reading-list)))))
(lyskom-set-mode-line))))
......
......@@ -143,6 +143,15 @@
(eq (car-safe object) 'READ-INFO))
(defsubst read-info-append-text-list (read-info texts)
(set-read-info->text-list
read-info
(nconc (read-info->text-list read-info)
texts)))
(defsubst read-info-enter-text-last (read-info text-no)
(read-info-append-text-list read-info (list text-no)))
;;; ================================================================
;;; read-list
......@@ -218,10 +227,7 @@ Returns t if there was a conference to insert this text into."
((and (eq 'CONF (read-info->type read-info))
(= (conf-stat->conf-no recipient)
(conf-stat->conf-no (read-info->conf-stat read-info))))
(set-read-info->text-list
read-info
(nconc (read-info->text-list read-info)
(list text-no)))
(read-info-enter-text-last read-info text-no)
(setq inserted t))))
inserted))
......@@ -265,10 +271,23 @@ will nomally be inserted after the old one, but if BEFORE is non-nil it
will be inserted before it."
(let ((pri (+ (if before 0 -1)
(read-info->priority read-info)))
(continue t))
(continue t)
(conf-stat (read-info->conf-stat read-info))
(type (read-info->type read-info)))
(while continue
(cond
((null (cdr rlist))
;; This case was added by davidk 960925. It is not used from
;; everywhere, but at least lyskom-enter-map-in-to-do-list
;; should become more efficient.
((and (eq type 'CONF)
(eq (read-info->type (car (cdr rlist))) 'CONF)
(eq conf-stat (read-info->conf-stat (car (cdr rlist)))))
(read-info-append-text-list
(car (cdr rlist))
(text-list->texts (read-info->text-list read-info)))
(setq continue nil))
((null (cdr rlist))
(setcdr rlist (list read-info))
(setq continue nil))
((>= pri (read-info->priority (car (cdr rlist))))
......
......@@ -415,26 +415,30 @@ Also adds to lyskom-to-do-list."
(progn
(setq lyskom-membership (sort (cons membership lyskom-membership)
'lyskom-membership-<))
(let ((map (blocking-do
'get-map
(conf-stat->conf-no conf-stat)
(max (1+ (membership->last-text-read membership))
(conf-stat->first-local-no conf-stat))
(conf-stat->no-of-texts conf-stat))))
(if map
(let ((texts (skip-first-zeros
(sort (listify-vector (map->text-nos map))
'<))))
(if texts
(read-list-enter-read-info
(lyskom-create-read-info
'CONF conf-stat
(membership->priority membership)
(lyskom-create-text-list
texts)
nil nil)
lyskom-to-do-list))))
))
;; (let ((map (blocking-do
;; 'get-map
;; (conf-stat->conf-no conf-stat)
;; (max (1+ (membership->last-text-read membership))
;; (conf-stat->first-local-no conf-stat))
;; (conf-stat->no-of-texts conf-stat))))
;; (if map
;; (let ((texts (skip-first-zeros
;; (sort (listify-vector (map->text-nos map))
;; '<))))
;; (if texts
;; (read-list-enter-read-info
;; (lyskom-create-read-info
;; 'CONF conf-stat
;; (membership->priority membership)
;; (lyskom-create-text-list
;; texts)
;; nil nil)
;; lyskom-to-do-list))))
;; )
(lyskom-prefetch-map-using-conf-stat
conf-stat
(1+ (membership->last-text-read membership))
membership))
(lyskom-insert-string 'conf-does-not-exist))
)
......
......@@ -555,39 +555,30 @@ RUN -> call function. Delete. Not allowed inside COLLECT/USE."
(lyskom-queue-delete-first (kom-queue->pending queue))
(setq first-pending (lyskom-queue->first (kom-queue->pending queue))))))
;;; Quit is ok to press while the handler is running but we should catch it
;;; here
;;; Quit is NOT ok to press while the handler is running. inhibit-quit
;;; should be t when these are called.
(defun lyskom-apply-handler (pending)
"Apply a handler. Args: PENDING.
PENDING is an entry of the list as described in documentation for the variable
lyskom-call-data. The car on the list must be a PARSED:
('PARSED RESULT HANDLER HANDLER-DATA)"
(let ((inhibit-quit nil))
(condition-case error
(if (car (cdr (cdr pending)))
(apply (car (cdr (cdr pending))) ;Handler
(car (cdr pending)) ;Result
(car (cdr (cdr (cdr pending)))))) ;Handler-data
(quit (beep)))))
(if (car (cdr (cdr pending)))
(apply (car (cdr (cdr pending))) ;Handler
(car (cdr pending)) ;Result
(car (cdr (cdr (cdr pending))))))) ;Handler-data
(defun lyskom-apply-multi-handler (pending result-list)
"Apply a handler for a lyskom-collect - lyskom-use construct."
(let ((inhibit-quit nil))
(condition-case error
(apply (car (cdr pending)) ;Multi-handler
(nconc result-list
(car (cdr (cdr pending))))) ;Multi-handler-data
(quit (beep)))))
(apply (car (cdr pending)) ;Multi-handler
(nconc result-list
(car (cdr (cdr pending)))))) ;Multi-handler-data
(defun lyskom-apply-multi-list-handler (pending result-list)
"Apply a handler for a lyskom-collect - lyskom-list-use construct."
(let ((inhibit-quit nil))
(condition-case error
(apply (car (cdr pending)) ;Multi-handler
(cons result-list
(car (cdr (cdr pending))))) ;Multi-handler-data
(quit (beep)))))
(apply (car (cdr pending)) ;Multi-handler
(cons result-list
(car (cdr (cdr pending)))))) ;Multi-handler-data
(defun lyskom-apply-function (pending)
(setcar pending 'HALTED)
......
No preview for this file type
......@@ -130,8 +130,14 @@ Value returned is always nil."
(list 'defun cmd args doc interactive-decl
(list 'lyskom-start-of-command (list 'quote cmd))
(list 'unwind-protect
(cons 'progn
forms)
(list 'condition-case 'error
(cons 'progn
forms)
(list 'quit
(list 'ding)
(list 'lyskom-insert-before-prompt
(list 'lyskom-get-string
(list 'quote 'interrupted)))))
(list 'lyskom-end-of-command))))
......
......@@ -118,7 +118,9 @@ Signal lyskom-protocol-error if the next token is not a number."
(goto-char lyskom-parse-pos)
(let* ((max (point-max))
(result (condition-case read-error
(read (current-buffer))
;; Eval it to prevent malfunction when
;; edebug-all-defs or edebug-all-forms is non-nil.
(read (current-buffer))
(end-of-file (signal 'lyskom-parse-incomplete nil))))
(pos (point)))
(cond
......@@ -907,7 +909,9 @@ functions and variables that are connected with the lyskom-buffer."
(let* ((lyskom-parse-pos 1)
(key (lyskom-parse-nonwhite-char)))
(condition-case err
(let ((inhibit-quit nil))
(let ((inhibit-quit t)) ; Used to be nil, but that can
; cause hard-to-repair
; problems
(cond
((eq key ?=) ;The call succeeded.
(lyskom-parse-success (lyskom-parse-num) lyskom-buffer))
......
......@@ -86,7 +86,9 @@ lyskom-queue.
are done.
For every membership-part we fetch the conf-stats
before continuing with the next part.
(MEMBERSHIPISREAD) - Just sets the lyskom-membership-is-read variable to t.
('MEMBERSHIPISREAD) - Just sets the lyskom-membership-is-read variable to t.
('ALL-CONF-TEXTS) - All text in all conferences.
('CONF-TEXTS) - All text in one conference.
See further documentation in the source code.")
......@@ -119,6 +121,11 @@ See further documentation in the source code.")
"t when the prefetch-process is started and going.")
(defvar lyskom-inhibit-prefetch nil
"Set this to a non-nil value locally to inhibit the prefetch.
This is used to prevent the prefetch code to reenter itself.")
(defvar lyskom-pending-prefetch 0
"Variable counting the number of unfinished prefetch requests.")
......@@ -140,7 +147,8 @@ at a time.")
"Sets up the prefetch process in lyskom."
;+++ Much more could be done here.
(setq lyskom-prefetch-stack (lyskom-stack-create))
(setq lyskom-pending-prefetch 0))
(setq lyskom-pending-prefetch 0)
(setq lyskom-membership-is-read 0))
(defun lyskom-prefetch-conf (conf-no &optional queue)
......@@ -225,22 +233,25 @@ lyskom-prefetch-stack."
(lyskom-continue-prefetch))
(defun lyskom-prefetch-map (conf-no first-local &optional queue)
(defun lyskom-prefetch-map (conf-no first-local membership &optional queue)
"Prefetches a map for conf CONFNO starting att FIRST-LOCAL."
(if queue
(lyskom-queue-enter queue (list 'CONFSTATFORMAP conf-no first-local))
(lyskom-stack-push lyskom-prefetch-stack (list 'CONFSTATFORMAP
conf-no first-local)))
(lyskom-queue-enter queue (list 'CONFSTATFORMAP
conf-no first-local membership))
(lyskom-stack-push lyskom-prefetch-stack
(list 'CONFSTATFORMAP
conf-no first-local membership)))
(lyskom-continue-prefetch))
(defun lyskom-prefetch-map-using-conf-stat (conf-stat first-local
(defun lyskom-prefetch-map-using-conf-stat (conf-stat first-local membership
&optional queue)
"Prefetches a map for conf CONFSTAT starting att FIRST-LOCAL."
(if queue
(lyskom-queue-enter queue (list 'MAP conf-stat first-local))
(lyskom-queue-enter queue (list 'MAP conf-stat first-local membership))
(lyskom-stack-push lyskom-prefetch-stack (list 'MAP
conf-stat first-local)))
conf-stat first-local
membership)))
(lyskom-continue-prefetch))
......@@ -265,6 +276,24 @@ lyskom-prefetch-stack."
(lyskom-continue-prefetch))
(defun lyskom-prefetch-all-conf-texts (&optional queue)
"Prefetches the texts in all conferences."
(if queue
(lyskom-queue-enter queue (list 'ALL-CONF-TEXTS))
(lyskom-stack-push lyskom-prefetch-stack (list 'ALL-CONF-TEXTS)))
(lyskom-continue-prefetch))
(defun lyskom-prefetch-conf-texts (text-list &optional queue)
"Prefetches the texts in all conferences."
(if (null (text-list->texts text-list))
nil
(if queue
(lyskom-queue-enter queue (list 'CONF-TEXTS text-list))
(lyskom-stack-push lyskom-prefetch-stack (list 'CONF-TEXTS text-list))))
(lyskom-continue-prefetch))
;;; ================================================================
;;; Functions internal to the prefetch package
......@@ -283,14 +312,20 @@ lyskom-prefetch-stack."
(defun lyskom-continue-prefetch ()
"Called after each prefetch is finished and also when the whole prefetch
process is started. Used to keep prefetch going."
(if lyskom-prefetch-in-action
(let ((lyskom-prefetch-in-action nil)) ; Make sure we don't call this
(if (not lyskom-inhibit-prefetch)
(let ((lyskom-inhibit-prefetch t)) ; Make sure we don't call this
; recursively
(while (and (< lyskom-pending-prefetch
lyskom-prefetch-limit)
(lyskom-prefetch-one-item)
;; Only increase lyskom-pending-prefetch if there
;; was something to get.
;; Only increase lyskom-pending-prefetch if a server
;; call was made.
;;
;; The return value from lyskom-prefetch-one-item
;; is whether it has sent a server call, but it
;; should really be if the prefetch-stack has been
;; altered. See the comment in
;; lyskom-prefetch-one-item.
(++ lyskom-pending-prefetch))))))
......@@ -360,14 +395,39 @@ Return t if an element was prefetched, otherwise return nil."
(lyskom-prefetch-one-request element queue)
(setq result t)))
;; Special request
;; Special requests
((and (listp element)
(eq (car element) 'MEMBERSHIPISREAD))
(setq lyskom-membership-is-read t))
(memq (car element) '(MEMBERSHIPISREAD ALL-CONF-TEXTS)))
(if (eq (car element) 'MEMBERSHIPISREAD)
(setq lyskom-membership-is-read t)
;; Temporarily disabled
(let ((queue (lyskom-queue-create)))
(setcar prefetch-list queue)
(mapcar
(lambda (read-info)
(mapcar
(lambda (text-no)
(lyskom-prefetch-text-all text-no queue))
(text-list->texts (read-info->text-list read-info))))
(read-list->all-entries lyskom-to-do-list))
(lyskom-queue-enter queue 'FINISHED)))
;; This is an ugly hack. If this function returns a non-nil
;; value, lyskom-prefetch-continue will assume that a server
;; call was made and increase lyskom-pending-prefetch. But
;; no server call has been made, so we decrease
;; lyskom-pending-prefetch "in advance". The reason that
;; this sets result to t is that we want the loop in
;; lyskom-continue-prefetch to keep running, as there is no
;; server response that will wake the prefetch up in the
;; future.
;;(-- lyskom-pending-prefetch)
;;(setq result t)
)
(t (signal 'lyskom-internal-error
'(lyskom-prefetch-one-item ": unknown key"))))
(setq prefetch-list rest-list)
(if (not (or prefetch-list
(lyskom-stack-isempty list-stack)))
......@@ -411,7 +471,8 @@ Return t if an element was prefetched, otherwise return nil."
(lyskom-prefetch-handler)))
((eq (car request) 'CONFSTATFORMAP)
(initiate-get-conf-stat 'prefetch 'lyskom-prefetch-confstatformap-handler
(nth 1 request) (nth 2 request) queue))
(nth 1 request) (nth 2 request) (nth 3 request)
queue))
((eq (car request) 'MAP)
(initiate-get-map 'prefetch 'lyskom-prefetch-map-handler
(conf-stat->conf-no (nth 1 request))
......@@ -419,11 +480,13 @@ Return t if an element was prefetched, otherwise return nil."
lyskom-fetch-map-nos
(nth 1 request)
(+ lyskom-fetch-map-nos (nth 2 request))
(nth 3 request)
queue))
((eq (car request) 'MARKS)
(initiate-get-marks 'prefetch 'lyskom-prefetch-marks-handler queue))
((eq (car request) 'WHOBUFFER)
(initiate-who-is-on 'prefetch 'lyskom-prefetch-whobuffer-handler queue))
(t (signal 'lyskom-internal-error
(list "lyskom-prefetch-one-request - unknown key:"
(car request))))))
......@@ -504,53 +567,57 @@ Put the requests on QUEUE."
(lyskom-start-prefetch))
(defun lyskom-prefetch-membership-handler (membership pers-no queue)
(defun lyskom-prefetch-membership-handler (memberships pers-no queue)
"Handle the return of the membership prefetch call."
(lyskom-stop-prefetch)
(let ((list (listify-vector membership)))
(lyskom-add-membership-to-membership membership)
(let ((list (listify-vector memberships)))
(lyskom-add-membership-to-membership memberships)
(while list
(lyskom-prefetch-map (membership->conf-no (car list))
(1+ (membership->last-text-read (car list)))
queue)
(if (lyskom-visible-membership (car list))
(lyskom-prefetch-map (membership->conf-no (car list))
(1+ (membership->last-text-read (car list)))
(car list)
queue))
(setq list (cdr list)))
(if (and (numberp lyskom-membership-is-read)
(< (length membership) lyskom-fetch-membership-length))
(< (length memberships) lyskom-fetch-membership-length))
(progn
(setq lyskom-membership-is-read 'almost)
(lyskom-queue-enter queue (list 'MEMBERSHIPISREAD)))
(setq lyskom-membership-is-read (+ lyskom-membership-is-read
lyskom-fetch-membership-length))
(lyskom-prefetch-membership pers-no queue)))
(lyskom-prefetch-membership pers-no queue)
))
(lyskom-queue-enter queue 'FINISHED)
(-- lyskom-pending-prefetch)
(lyskom-start-prefetch))
(defun lyskom-prefetch-confstatformap-handler (conf-stat first-local queue)
(defun lyskom-prefetch-confstatformap-handler (conf-stat first-local
membership queue)
"Now that we have the conf-stat we can fetch the map."
(lyskom-stop-prefetch)
(lyskom-prefetch-map-using-conf-stat conf-stat first-local queue)
(lyskom-prefetch-map-using-conf-stat conf-stat first-local membership queue)
(lyskom-queue-enter queue 'FINISHED)
(-- lyskom-pending-prefetch)
(lyskom-start-prefetch))
(defun lyskom-prefetch-map-handler (map conf-stat first-local queue)
(defun lyskom-prefetch-map-handler (map conf-stat first-local membership queue)
"Handle the return of the membership prefetch call.
Maps are `cached' in lyskom-to-do-list."
(lyskom-stop-prefetch)
(if map
(let ((list (listify-vector (map->text-nos map))))
;; +++ Check kom-session-priority
(if list
(lyskom-prefetch-map-using-conf-stat
conf-stat (+ first-local lyskom-fetch-map-nos)
queue))
(lyskom-enter-map-in-to-do-list map conf-stat)))
(when map
(if (not (zerop (length (map->text-nos map))))
(lyskom-prefetch-map-using-conf-stat
conf-stat (+ first-local lyskom-fetch-map-nos)
membership
queue))
(lyskom-enter-map-in-to-do-list map conf-stat membership))
(lyskom-queue-enter queue 'FINISHED)
(-- lyskom-pending-prefetch)
(lyskom-start-prefetch)
(lyskom-update-prompt)
(lyskom-set-mode-line))
(defun lyskom-prefetch-marks-handler (marks queue)
......@@ -567,7 +634,8 @@ Maps are `cached' in lyskom-to-do-list."
(defun lyskom-prefetch-whobuffer-handler (who-is-on queue)
"Handle the who-is-on info. The goal here is to get an updated who-buffer."
(cache-initiate-who-info-buffer who-is-on) ;+++ should be done later
;+++ should be done later
(cache-initiate-who-info-buffer who-is-on lyskom-buffer)
(-- lyskom-pending-prefetch)
)