Skip to content

Commit 2203a5b

Browse files
authored
Delete response factory after sending complete final (#373)
1 parent 4d469a9 commit 2203a5b

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/response_sender.cc

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,14 @@ ResponseSender::ResponseSender(
6262
response_factory_address_(response_factory_address),
6363
is_decoupled_(is_decoupled),
6464
requested_output_names_(requested_output_names), shm_pool_(shm_pool),
65-
pb_cancel_(pb_cancel), closed_(false), number_of_response_sent_(0)
65+
pb_cancel_(pb_cancel), closed_(false), number_of_response_sent_(0),
66+
response_factory_deleted_(false)
6667
{
6768
}
6869

6970
ResponseSender::~ResponseSender()
7071
{
71-
std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance();
72-
stub->EnqueueCleanupId(
73-
reinterpret_cast<void*>(response_factory_address_),
74-
PYTHONSTUB_DecoupledResponseFactoryCleanup);
72+
DeleteResponseFactory();
7573
}
7674

7775
void
@@ -248,6 +246,10 @@ ResponseSender::Send(
248246
"An error occurred while sending a response.");
249247
}
250248
}
249+
250+
if (flags == TRITONSERVER_RESPONSE_COMPLETE_FINAL) {
251+
DeleteResponseFactory();
252+
}
251253
}
252254

253255
bool
@@ -263,4 +265,16 @@ ResponseSender::Close()
263265
closed_ = true;
264266
}
265267

268+
void
269+
ResponseSender::DeleteResponseFactory()
270+
{
271+
bool already_deleted = response_factory_deleted_.exchange(true);
272+
if (!already_deleted) {
273+
std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance();
274+
stub->EnqueueCleanupId(
275+
reinterpret_cast<void*>(response_factory_address_),
276+
PYTHONSTUB_DecoupledResponseFactoryCleanup);
277+
}
278+
}
279+
266280
}}} // namespace triton::backend::python

src/response_sender.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#pragma once
2828

29+
#include <atomic>
2930
#include <mutex>
3031

3132
#include "infer_response.h"
@@ -52,6 +53,7 @@ class ResponseSender {
5253
private:
5354
void UpdateStateAndCounters(
5455
const std::shared_ptr<InferResponse>& response, const uint32_t flags);
56+
void DeleteResponseFactory();
5557

5658
intptr_t request_address_;
5759
intptr_t response_factory_address_;
@@ -63,5 +65,7 @@ class ResponseSender {
6365
std::mutex mu_;
6466
bool closed_;
6567
size_t number_of_response_sent_;
68+
69+
std::atomic<bool> response_factory_deleted_;
6670
};
6771
}}} // namespace triton::backend::python

0 commit comments

Comments
 (0)