##// END OF EJS Templates
smartset: split generatorset classes to avoid cycle...
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
Gregory Szorc -
r35517:12a46ad6 default
Show More
Name Size Modified Last Commit Author
/ contrib
benchmarks
chg
debian
docker
hgsh
macosx
plan9
python-zstandard
vagrant
vim
win32
wix
Makefile.python Loading ...
all-revsets.txt Loading ...
asv.conf.json Loading ...
base-revsets.txt Loading ...
bash_completion Loading ...
bdiff-torture.py Loading ...
build-linux-wheels.sh Loading ...
builddeb Loading ...
buildrpm Loading ...
casesmash.py Loading ...
check-code.py Loading ...
check-commit Loading ...
check-config.py Loading ...
check-py3-compat.py Loading ...
clang-format-blacklist Loading ...
debugcmdserver.py Loading ...
debugshell.py Loading ...
dirstatenonnormalcheck.py Loading ...
dockerdeb Loading ...
dockerlib.sh Loading ...
dockerrpm Loading ...
dumprevlog Loading ...
editmerge Loading ...
editmergeps.bat Loading ...
editmergeps.ps1 Loading ...
fixpax.py Loading ...
genosxversion.py Loading ...
hg-ssh Loading ...
hg-test-mode.el Loading ...
hgclient.py Loading ...
hgk Loading ...
hgperf Loading ...
hgweb.fcgi Loading ...
hgweb.wsgi Loading ...
import-checker.py Loading ...
linux-wheel-centos5-blacklist Loading ...
logo-droplets.svg Loading ...
memory.py Loading ...
mercurial.el Loading ...
mercurial.spec Loading ...
mq.el Loading ...
packagelib.sh Loading ...
perf.py Loading ...
phabricator.py Loading ...
pylintrc Loading ...
python-hook-examples.py Loading ...
python3-ratchet.py Loading ...
python3-whitelist Loading ...
revsetbenchmarks.py Loading ...
showstack.py Loading ...
simplemerge Loading ...
synthrepo.py Loading ...
tcsh_completion Loading ...
tcsh_completion_build.sh Loading ...
undumprevlog Loading ...
xml.rnc Loading ...
zsh_completion Loading ...