◐ Shell
clean mode source ↗

(READY FOR REVIEW)Garbage collect: A stop-the-world cycle collector by discord9 · Pull Request #4180 · RustPython/RustPython

@discord9 changed the title feat: A simple stop-the-world cycle collector(Draft) feat: A simple stop-the-world cycle collector

Sep 22, 2022

fanninpm

@discord9 discord9 changed the title feat: A simple stop-the-world cycle collector feat: Garbage collect: A simple stop-the-world cycle collector

Sep 24, 2022

@discord9 discord9 marked this pull request as ready for review

September 24, 2022 15:09

@discord9 discord9 changed the title feat: Garbage collect: A simple stop-the-world cycle collector feat: Garbage collect: A simple stop-the-world cycle collector(Redraft)

Nov 4, 2022

@discord9 discord9 changed the title feat: Garbage collect: A simple stop-the-world cycle collector(Redraft) Garbage collect: A simple stop-the-world cycle collector(Redraft)

Nov 4, 2022

@discord9 discord9 changed the title Garbage collect: A simple stop-the-world cycle collector(Redraft) Garbage collect: A simple stop-the-world cycle collector(redrafted)

Nov 4, 2022

@discord9 discord9 marked this pull request as ready for review

November 4, 2022 11:57

@discord9 discord9 changed the title Garbage collect: A simple stop-the-world cycle collector(redrafted) (Redrafted)Garbage collect: A simple stop-the-world cycle collector

Nov 5, 2022

coolreader18

youknowone

youknowone

feat: add double drop check in debug mode

fix: use Mutex instead of PyMutex in `ID2TYPE`

refactor: cfg cond for `Drop` trait instead

feat: add `Trace` trait

feat: trace RwLock right&trace tuple

feat: `Trace` for `PyDict`

feat: `Trace` on `PyIter`&`PyIterReturn`&`PyIterIter`

feat: `Trace` on PyEnumerate

feat: `Trace` on `ArgCallable` `ArgIterable` `ArgMapping` `ArgSequence`

feat: `Trace` on `IterStatus` `PySequenceIterator` `PyCallableIterator` `PositionIterInternal`

feat: `Trace` on `PyReverseSequenceIterator`

feat: `Trace` on `PyTuple` `PyTupleIterator` `PyTupleTyped`

feat: `Trace` on `PyFilter` `PyFunction` `PyBoundMethod`

feat: `Trace` on `PyCell`

feat: `Trace` on `PyList` `PyListIterator` `PyListReverseIterator`

feat: `Trace` on `PyMap` `PyMappingProxy` `MappingProxyInner`

feat: `Trace` on PyMemoryViewNewArgs, PyMemoryViewIterator

feat: `Trace` on PyProperty, PySet, PySetInner

feat: `Trace` on PySlice, PyStaticMethod

feat: `Trace` on FuncArgs, KwArgs, PosArgs, OptionalArg

feat: `Trace` on PySuper, PySuperNewArgs

feat: `Trace` on `PyTraceback`

feat: `Trace` for PyBaseException, PyType, PyUnion

feat: `Trace` on PyWeakProxy, PyZip, PyBuffer

feat: `Trace` on PyMapping, PyNumber, PySequence

feat: add `list_traceable` macro

fix: right lifetime for `TracerFn`

feat: `trace` PyObjectRef&PyRef

feat: garbage cycle collector

fix: put drop_only in different loop

feat: core algorithm of garbage collect

feat: add drop_only&dealloc_only to vtable

feat: modify core.rs to use gc

style: cargo fmt

feat: add `try_gc`& gc per frame

feat: add `collect` in gc module

fix: set black when safe_inc

fix: check if is gc-ing in `should_gc`

refactor: cfg(gc) for `Drop` trait

fix: not add to roots multiple times

fix: add judge for if dropped

doc: add TODO

fix: prevent dealloc cycle garbage early

fix: `partially_drop` header later

fix: add dealloc guard for deref

fix: run `__del__`&drop separately

feat: more lock to gc&drop check

feat: make gc less freq

fix: cfg compile&support attr in partially_drop

feat: `pytrace` macro

feat: use `#[pytrace]` in some types

feat: compact header

feat: change gc cond to 10007 obj cnts

fix: trace `PyRange`

fix: drop ref vtable before dealloc to prevent UB

fix: debug check&cfg cond&clippy

fix: add ref only after `__del__` is done

feat: trace(unsafely ) PyMutex

feat: prevent trace PyMutex when not gc

feat: change `PyRwlock` back to `PyMutex`

fix: testcase test_reference_loop test_unique_composite

refactor: early exit of collect_cycles

fix: cfg cond

feat: gc pause warn msg when wait too long

fix: not run __del__ in cycles

fix: expected failure for test_unique_composite

fix: allow test_ioctl_signed_unsigned_code_param

feat: split `drop` to `del`&`weakref`

fix: lock cond

fix: pause cond so high freq gc not halt all

refactor: put impl Collector together

feat: drop weak_list later

feat: unlock gc pause lock fairly

feat: print progress for two long test

feat: adjust lock order&not panic

fix: let obj handle its weakref's dealloc

fix: check stack before pop

fix: not leak weakref

log: remove some false alarm

fix: cfg flag for cond compile

fix: cfg flag for no-default-feature

fix: use non-block incref

test: change gc to 1ms&exit all if wait too long

fix: INCREF done right&not gc until last gc done

feat: add `gc` feature to root crate

doc: TODO for PEP442 del in cycle

fix: temporaily add one more `gc.collect()`

test: add gc feature in CI

refactor: make `mark/scan_roots` associated fn

refactor: `free_cycles` fn

test: flush progress prompt

docs: add TODO for modified testcases

refactor: header state's type

feat: drop_only

log: gc info

clippy: drop_only allow unused

refactor: rename `gc` feature to `gc_bacon`

refactor: remove `allow(unused)`

feat: `MaybeTrace` trait

feat: add `trace` Meta for `pyclass` proc macro

feat: cfg cond flag for `MaybeTrace`

feat: add `trace` in vtable

fix: add`#[pyclass(trace)` for manual impl trace

fix: elide null check in vtable&CR refactor

fix: change name in CI tests

feat: not use gc in wasm

refactor: accord to Code Review

doc&fix: explain gc&fix macro

fix: test_sys_setprofile