Skip to content

Commit 11afe2f

Browse files
committed
Avoid premature release for external pointers [@krlmlr, r-lib/cpp11/pull/423/files]
1 parent 168d733 commit 11afe2f

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

inst/include/cpp4r/external_pointer.hpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,19 @@ class external_pointer {
6767
data_ = safe[Rf_shallow_duplicate](rhs.data_);
6868
}
6969

70-
external_pointer(external_pointer&& rhs) { reset(rhs.release()); }
70+
// the old external_pointer(external_pointer&& rhs) { reset(rhs.release()); }
71+
// affects duckdb [@krlmlr, r-lib/cpp11/pull/423/files]
72+
external_pointer(external_pointer&& rhs) {
73+
data_ = rhs.data_;
74+
rhs.data_ = R_NilValue;
75+
}
7176

72-
external_pointer& operator=(external_pointer&& rhs) noexcept { reset(rhs.release()); }
77+
// same for the old external_pointer& operator=(external_pointer&& rhs) noexcept {
78+
// reset(rhs.release()); }
79+
external_pointer& operator=(external_pointer&& rhs) noexcept {
80+
data_ = rhs.data_;
81+
rhs.data_ = R_NilValue;
82+
}
7383

7484
external_pointer& operator=(std::nullptr_t) noexcept { reset(); };
7585

0 commit comments

Comments
 (0)