Skip to content

Commit 0f503ab

Browse files
authored
fix: prevent mock object leak in OpAmp tests (#103)
1 parent 8def646 commit 0f503ab

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

  • prod/native/libcommon/code/transport

prod/native/libcommon/code/transport/OpAmp.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,11 @@ void OpAmp::sendInitialAgentToServer() {
158158
throw std::runtime_error("Failed to serialize AgentToServer initial message");
159159
}
160160

161-
auto callback = [self = shared_from_this()](int16_t responseCode, std::span<std::byte> data) {
162-
ELOG_DEBUG(self->log_, OPAMP, "sendInitialAgentToServer response code: {}, data size: {}", responseCode, data.size_bytes());
163-
self->handleServerToAgent(reinterpret_cast<const char *>(data.data()), data.size_bytes());
161+
auto callback = [weak_self = weak_from_this()](int16_t responseCode, std::span<std::byte> data) {
162+
if (auto self = weak_self.lock()) {
163+
ELOG_DEBUG(self->log_, OPAMP, "sendInitialAgentToServer response code: {}, data size: {}", responseCode, data.size_bytes());
164+
self->handleServerToAgent(reinterpret_cast<const char *>(data.data()), data.size_bytes());
165+
}
164166
};
165167

166168
transport_->enqueue(endpointHash_, {reinterpret_cast<std::byte *>(payload.data()), payload.length()}, callback);
@@ -185,9 +187,11 @@ void OpAmp::sendHeartbeat() {
185187
throw std::runtime_error("Failed to serialize AgentToServer heartbeat message");
186188
}
187189

188-
auto callback = [self = shared_from_this()](int16_t responseCode, std::span<std::byte> data) {
189-
ELOG_DEBUG(self->log_, OPAMP, "sendHeartbeat response code: {} payload size: {}", responseCode, data.size());
190-
self->handleServerToAgent(reinterpret_cast<const char *>(data.data()), data.size_bytes());
190+
auto callback = [weak_self = weak_from_this()](int16_t responseCode, std::span<std::byte> data) {
191+
if (auto self = weak_self.lock()) {
192+
ELOG_DEBUG(self->log_, OPAMP, "sendHeartbeat response code: {} payload size: {}", responseCode, data.size());
193+
self->handleServerToAgent(reinterpret_cast<const char *>(data.data()), data.size_bytes());
194+
}
191195
};
192196
transport_->enqueue(endpointHash_, {reinterpret_cast<std::byte *>(payload.data()), payload.length()}, callback);
193197
}

0 commit comments

Comments
 (0)