@@ -62,16 +62,14 @@ ResponseSender::ResponseSender(
62
62
response_factory_address_ (response_factory_address),
63
63
is_decoupled_(is_decoupled),
64
64
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 )
66
67
{
67
68
}
68
69
69
70
ResponseSender::~ResponseSender ()
70
71
{
71
- std::unique_ptr<Stub>& stub = Stub::GetOrCreateInstance ();
72
- stub->EnqueueCleanupId (
73
- reinterpret_cast <void *>(response_factory_address_),
74
- PYTHONSTUB_DecoupledResponseFactoryCleanup);
72
+ DeleteResponseFactory ();
75
73
}
76
74
77
75
void
@@ -248,6 +246,10 @@ ResponseSender::Send(
248
246
" An error occurred while sending a response." );
249
247
}
250
248
}
249
+
250
+ if (flags == TRITONSERVER_RESPONSE_COMPLETE_FINAL) {
251
+ DeleteResponseFactory ();
252
+ }
251
253
}
252
254
253
255
bool
@@ -263,4 +265,16 @@ ResponseSender::Close()
263
265
closed_ = true ;
264
266
}
265
267
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
+
266
280
}}} // namespace triton::backend::python
0 commit comments