Skip to content

Commit 46b5a2c

Browse files
committed
Use early return, let callbacks handle exceptions
1 parent f5ca973 commit 46b5a2c

1 file changed

Lines changed: 16 additions & 17 deletions

File tree

Framework/Core/include/Framework/DataAllocator.h

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -115,31 +115,30 @@ struct LifetimeHolder {
115115
// invoke the callback early (e.g. for the Product<> case)
116116
void release()
117117
{
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;
118+
if (!ptr) {
119+
return;
120+
}
121+
122+
std::unique_ptr<T> released{ptr};
123+
ptr = nullptr;
124+
auto releaseCallback = std::move(callback);
125+
if (!releaseCallback) {
126+
return;
131127
}
128+
releaseCallback(*released);
132129
}
133130

134131
// Delete the owned object without invoking the release callback. This is used
135132
// when a partially filled object must be abandoned.
136133
void discard()
137134
{
138-
if (ptr) {
139-
callback = nullptr;
140-
delete ptr;
141-
ptr = nullptr;
135+
if (!ptr) {
136+
return;
142137
}
138+
139+
callback = nullptr;
140+
delete ptr;
141+
ptr = nullptr;
143142
}
144143
};
145144

0 commit comments

Comments
 (0)