Let me look at the history for that file. I can't remember if I fixed some of this on the working branch (darcs) or back during the 0.9.0 release. There are a bunch of subtle interactions that can disturb each other, but that does look like a problem doesn't it?

Ian


On Sep 8, 2007, at 3:28 PM, Chris Laux wrote:

So I had a look at it myself and it turned out to be much easier than I
had expected, which is what kept me from trying in the first place.

The following method in src/db-bdb/bdb-collections.lisp is the culprit:

(defmethod cursor-prev ((cursor bdb-cursor))
  (if (cursor-initialized-p cursor)
      (let ((sc (get-con (cursor-btree cursor))))
        (with-buffer-streams (key-buf value-buf)
          (multiple-value-bind (key val)
              (db-cursor-move-buffered (cursor-handle cursor)
                                       key-buf value-buf :prev t)
            (if (and key (= (buffer-read-oid key) (cursor-oid cursor)))
                (values t (deserialize key sc)
                        (deserialize val sc))
                (setf (cursor-initialized-p cursor) nil))))
        (cursor-last cursor))))

That "cursor-last" call at the end looks very suspicious, and indeed
removing it solves the problem. But I don't know where it belongs or if
it can be safely removed. Any ideas?

Cheers,

Chris Laux


Chris Laux wrote:
Hi again,

I seem to have stumbled across another bug: the from-end argument
doesn't seem to be working, map-btree always calls with the same
(presumably last) entry when it is set.

(defun test-btree-from-end (btree from-end)
  (let (acc
        (n 0))
    (map-btree #'(lambda (k v)
                   (push (list k v) acc)
                   (when (= (incf n) 4)
                     (return-from test-btree-from-end acc)))
               btree :from-end from-end)))

(test-btree-from-end ** nil)
((3398012969 #<MESSAGE oid:227324>) (3398012898 #<MESSAGE oid: 226751>) (3398012815 #<MESSAGE oid:226044>) (3398012772 #<MESSAGE oid: 225621>))

(test-btree-from-end *** t)
((3398231130 #<MESSAGE oid:552110>) (3398231130 #<MESSAGE oid: 552110>) (3398231130 #<MESSAGE oid:552110>) (3398231130 #<MESSAGE oid: 552110>))

My setup is BerkeleyDB 4.5.20 with Elephant 0.9.0 with SBCL 1.0.4 on
Linux/x86-64.

Thanks,

Chris Laux

_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

Reply via email to