Commit Graph

2297 Commits

Author SHA1 Message Date
Ralf W. Grosse-Kunstleve
48eb78ae77 Simpler and safe implementation based on new requirement: C++ (outside of the Python object) needs to hold a shared_ptr before shared_from_this is called. This is more similar to the existing implementation on current smart_holder HEAD, but still uses a weak_ptr to always return the same shared_ptr as long as C++ does not let it expire. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
3dd89f14df smart_holder_poc.h: type-erase raw_ptr before passing to shared_ptr::reset, to not trigger populating the shared_from_this weak_ptr. This way the only way the weak_ptr is populated is through loaded_as_shared_ptr. Breaks all but one test in test_class_sh_trampoline_shared_from_this.py, now marked skip WIP to test everything else with the GitHub CI. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
b1d9f0d28f Applying clang-tidy suggested fixes. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
adfd3e1700 Partial cleanup of tests. WIP. The cleanup uncovered a major problem. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
bfd4c4893e Leveraging new noop_deleter_acting_as_weak_ptr_owner to retrieve released vptr.
The placeholder `vptr` is never exposed anymore, therefore the externally visible `use_count`s are more intuitive.
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
0e4b38e34d Minor clang-tidy fix. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
4b872febcc Adding test_pass_released_shared_ptr_as_unique_ptr, exercising new guard in smart_holder_type_casters.h. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
e04196e82b Attempts to side-step various platform-specific issues. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
6214137c8d Resolving gcc warning-as-error (many versions, old and new). 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
553054b26b Adding tests involving stashing shared_ptrs. WIP. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
4218213f29 nodiscard fix. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
223283295f Two minor platform-specific fixes. Using static_cast instead of reinterpret_cast. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
993613d9bf Trying again, to get around unused parameter warnings-as-erros. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
20ef96c87d Disabling debugging call of weak_from_this for C++ < 17. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
bf8d6a2900 First fully successful attempt to make shared_from_this and trampolines play nicely.
Now also passes the open_spiel iterated_prisoners_dilemma_test ASAN clean, in addition to all pybind11 and PyCLIF unit tests.

The problem was that calling `std::shared_ptr<void>::reset()` with a `void` pointer cannot possibly update the `shared_from_this` `weak_ptr`.

The solution is to store a `shd_ptr_reset` function pointer in `guarded_deleter` (similar in idea to the stored function pointer for calling `delete`).

This commit still includes all debugging code, i.e. is "dirty". The code will be cleaned up after the GitHub CI is fully successful.
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
dcf8d0762f First attempt to make shared_from_this and trampolines play nicely. Passes all pybind11 and PyCLIF unit tests ASAN clean, but not the open_spiel iterated_prisoners_dilemma_test. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
bc21158082 Fixing git rebase -X theirs accident. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
4ab4f36a92 Fixing silly oversight (discovered while creating PR #3041). 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
cd5fbc56db Replacing virtual guarded_operator_call with non-virtual guarded_delete. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
1e6cc9dd69 Adding back explicit but default copy constructor, to keep some older compilers happy. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
275aaf977a Inserting const_cast for std::get_deleter return, to keep Ubuntu 20 GCC 6.3.0 happy. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
b04a70b5cc Fixing oversight (clang-tidy error). 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
362e64e1ca WIP snapshot: replacing std::shared_ptr<bool> flag_ptr with simple bool armed_flag. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
459301d9a8 WIP snapshot: std::get_deleter experiment. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
e80a1f0617 WIP snapshot. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
5bb38c10b3 MSVC 2015 compatibility. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
45ec61f419 Adding shared_ptr_reset_and_rescue_pointee_model_proof_of_concept. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
b633bb5b84 Inserting #ifdef to preempt Windows fatal exception. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
e0b770d549 Explictly discarding [[nodiscard]] to avoid MSVC CI failures. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
4f00ffdc69 Copying in shared_from_this_custom_deleters.cpp from github.com/rwgk, with adjustments.
Base version: e5318faa6a/shared_from_this_custom_deleters.cpp
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
28ed5ecce8 Revert "Experiment: commenting out test_class_sh_shared_from_this."
This reverts commit febf9ce949c0bc87a8bf7ab3ddae4deb28636c9d.
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
eae174b491 Revert "Experiment: effectively undoing all shared_from_this modifications."
This reverts commit d72d54ebb0b7784f5616edc02910dbd9cce0b2a4.
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
a6abb7cff1 Revert "Experiment: undoing even more."
This reverts commit 59bc2e183e7aef5e45c06aed6965de0ac52d7b06.
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
5f92b4ff1c Revert "Experiment: restoring original smart_holder_type_casters.h from smart_holder branch."
This reverts commit 19c5a3613fee71878ba2af0339eed325a5916089.
2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
2ae3c2ceb7 Experiment: restoring original smart_holder_type_casters.h from smart_holder branch. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
9da1e81590 Experiment: undoing even more. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
715ceb4bf3 Experiment: effectively undoing all shared_from_this modifications. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
6989f174ac Experiment: commenting out test_class_sh_shared_from_this. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
05bd93543b Fully emulating type_caster_base-related behavior: trying shared_from_this also for unowned pointees. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
e1de4e88b8 Adding test_class_sh_shared_from_this.cpp to tests/CMakeLists.txt. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
775873d0b6 Adding from_raw_pointer_take_ownership_or_shared_from_this(). 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
2a265860a7 enable_shared_from_this_from_raw_ptr_take_ownership_guard: better static_assert that also triggers for derived classes. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
24c223ad8e static_assert in from_raw_ptr_take_ownership, to be tested. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
7a74bfede7 Restoring init_holder overload for std::enable_shared_from_this and original tests/test_smart_ptr.py. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
e5b38a4459 Breaking up test_shared_ptr_from_this_and_references into smaller subtests. Skipping the only test that generates an ASAN heap-use-after-free. 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
94523e8a02 Experiments: 1. disabling enable_shared_from_this, 2. using smart_holder in test_class_sh_shared_from_this.cpp 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
252b6aefb8 Isolating shared_from_this tests from test_smart_ptr (minimal changes). 2021-06-30 07:04:31 -07:00
Ralf W. Grosse-Kunstleve
bcad852f6b Pure clang-format fixes (minor accident in PR #3039). 2021-06-29 16:16:00 -07:00
Jakob Lykke Andersen
b9241c0330 SM, remove type annotations in test 2021-06-29 05:57:32 -07:00
Jakob Lykke Andersen
f39efb850b SH, attribute and property tests 2021-06-29 05:57:32 -07:00