Skip to content
Snippets Groups Projects
Commit 12a46ad67a3c authored by Gregory Szorc's avatar Gregory Szorc
Browse files

smartset: split generatorset classes to avoid cycle

I uncovered a cycle manifesting in a memory leak by running
`hgperfrevset '::tip'`. The cycle was due to generatorset.__init__
assigning a bound method to self.__contains__. Internet sleuthing
revealed that assigning a bound method to an instance attribute
always creates a cycle.

This commit creates two new variants of generatorset for the special
cases of ascending and descending generators. The special
implementations of __contains__ have been extracted to these classes
where they are defined as __contains__.

generatorset now implements __new__ and changes the spawned type to
one of the new classes if needed.

Differential Revision: https://phab.mercurial-scm.org/D1780
parent 87918218da70
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment