[Webkit-unassigned] [Bug 67823] [NRWT] Provides a simple LRU cache class in Python.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Sep 15 21:34:52 PDT 2011


https://bugs.webkit.org/show_bug.cgi?id=67823





--- Comment #9 from Hayato Ito <hayato at chromium.org>  2011-09-15 21:34:52 PST ---
(From update of attachment 107582)
Thank you for addressing my comments! I added some comments. Sorry for the back and forth again.
I hope you will enjoy your last day of the internship. :)

View in context: https://bugs.webkit.org/attachment.cgi?id=107582&action=review

> Tools/Scripts/webkitpy/common/lru_cache.py:59
> +        node = Node(key, value, self._first)

I think if self._dict already contains the key, we have to delete the node with the key from the doubly linked list.
Without that, we are likely to have two nodes with the same key in the doubly liked list.

> Tools/Scripts/webkitpy/common/lru_cache.py:77
> +            next__last = self._last.next

Nit: Two underscores '__'.
You meant |next_last|, |next_first|?

> Tools/Scripts/webkitpy/common/lru_cache.py:88
> +        key_next = self._dict[key].next

You might use |node| here.
  key_next = node.next
  key_prev = node.prev

Or You might rewrite L88-L91 with the following two lines:
  node.next.prev = node.prev
  node.prev.next = node.next

> Tools/Scripts/webkitpy/common/lru_cache.py:99
> +        if self._first == self._last:

It seems that this should be 'self._first is self._last'.

> Tools/Scripts/webkitpy/common/lru_cache.py:102
> +            del self._dict[key]

It seems that if the key is not found here, a lru_cache will become inconsistant state (self._dict has one item, but self._first is None).

It might be better to call 'node = self._dict[key]' at the beginning of the function.
e.g.

   def __delitem__(self, key):
       node = self._dict[key]
       del self._dict[key]
       if self._first is self._last:
            self._first = None
            self._last = None
            return
       if self._first is node:
            self._first = node.prev
            self._first.next = None
            return
       if self._last is node:
            self._last = node.next
            self._last.prev = None
            return
       node.next.prev = node.prev
       node.prev.next = node.next

I've not tested this. I guess your existing unittests (or new tests) will find any bugs in this code :)

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list