;;; gnus-async.el --- asynchronous support for Gnus
-;; Copyright (C) 1996,97 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news
;; This file is part of GNU Emacs.
(defvar gnus-async-article-alist nil)
(defvar gnus-async-article-semaphore '(nil))
(defvar gnus-async-fetch-list nil)
+(defvar gnus-asynch-obarray nil)
(defvar gnus-async-prefetch-headers-buffer " *Async Prefetch Headers*")
(defvar gnus-async-header-prefetched nil)
gnus-async-header-prefetched nil))
(defun gnus-async-set-buffer ()
- (nnheader-set-temp-buffer gnus-async-prefetch-article-buffer t))
+ (nnheader-set-temp-buffer gnus-async-prefetch-article-buffer t)
+ (unless gnus-asynch-obarray
+ (set (make-local-variable 'gnus-asynch-obarray)
+ (gnus-make-hashtable 1023))))
(defun gnus-async-halt-prefetch ()
"Stop prefetching."
(when arg
(gnus-async-set-buffer)
(gnus-async-with-semaphore
- (push (list ',(intern (format "%s-%d" group article))
+ (push (list ',(intern (format "%s-%d" group article)
+ gnus-asynch-obarray)
,mark (set-marker (make-marker) (point-max))
,group ,article)
gnus-async-article-alist)))
(defun gnus-async-prefetched-article-entry (group article)
"Return the entry for ARTICLE in GROUP iff it has been prefetched."
- (let ((entry (assq (intern (format "%s-%d" group article))
- gnus-async-article-alist)))
+ (let ((entry (save-excursion
+ (gnus-async-set-buffer)
+ (assq (intern (format "%s-%d" group article)
+ gnus-asynch-obarray)
+ gnus-async-article-alist))))
;; Perhaps something has emptied the buffer?
(if (and entry
(= (cadr entry) (caddr entry)))