- (with-temporary-files (context :base (make-pathname :type "tmp"))
- (let* ((file (or (find-if #'probe-file
- (mapcar (lambda (template)
- (merge-pathnames data template))
- *tlsa-pathname-defaults*))
- (error "Couldn't find TLSA file `~A'" data)))
- (kind (identify-tlsa-selector-file file))
- (raw (raw-tlsa-assoc-data kind selector file context)))
- (read-tlsa-match-data match raw context))))))
+ (let ((key (list data selector match)))
+ (or (gethash key *tlsa-data-cache*)
+ (with-temporary-files (context :base (make-pathname :type "tmp"))
+ (let* ((file (or (find-if #'probe-file
+ (mapcar (lambda (template)
+ (merge-pathnames data
+ template))
+ *tlsa-pathname-defaults*))
+ (error "Couldn't find TLSA file `~A'" data)))
+ (kind (identify-tlsa-selector-file file))
+ (raw (raw-tlsa-assoc-data kind selector file context))
+ (binary (read-tlsa-match-data match raw context)))
+ (setf (gethash key *tlsa-data-cache*) binary))))))))