Skip to content

Commit f5ca973

Browse files
committed
Add discard support for LifetimeHolder
1 parent 9835670 commit f5ca973

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

Framework/Core/include/Framework/DataAllocator.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,28 @@ struct LifetimeHolder {
115115
// invoke the callback early (e.g. for the Product<> case)
116116
void release()
117117
{
118-
if (ptr && callback) {
119-
callback(*ptr);
118+
if (ptr) {
119+
auto* released = ptr;
120+
ptr = nullptr;
121+
auto releaseCallback = std::move(callback);
122+
if (releaseCallback) {
123+
try {
124+
releaseCallback(*released);
125+
} catch (...) {
126+
delete released;
127+
throw;
128+
}
129+
}
130+
delete released;
131+
}
132+
}
133+
134+
// Delete the owned object without invoking the release callback. This is used
135+
// when a partially filled object must be abandoned.
136+
void discard()
137+
{
138+
if (ptr) {
139+
callback = nullptr;
120140
delete ptr;
121141
ptr = nullptr;
122142
}

0 commit comments

Comments
 (0)