@@ -92,8 +92,12 @@ absl::Status VisualLanguageModelLegacyServable::parseRequest(std::shared_ptr<Gen
9292
9393 if (legacyExecutionContext->apiHandler ->isStream ()) {
9494 legacyExecutionContext->lastStreamerCallbackOutput = " " ; // initialize with empty string
95- auto callback = [& executionInProgress = legacyExecutionContext->executionInProgress , &mutex = legacyExecutionContext->mutex , &lastStreamerCallbackOutput = legacyExecutionContext->lastStreamerCallbackOutput ](std::string text) {
95+ auto callback = [& executionInProgress = legacyExecutionContext->executionInProgress , &mutex = legacyExecutionContext->mutex , &lastStreamerCallbackOutput = legacyExecutionContext->lastStreamerCallbackOutput , &clientDisconnected = legacyExecutionContext-> clientDisconnected ](std::string text) {
9696 SPDLOG_LOGGER_TRACE (llm_calculator_logger, " Streamer callback executed with text: [{}]" , text);
97+ if (clientDisconnected.load ()) {
98+ executionInProgress.notify_one ();
99+ return ov::genai::StreamingStatus::CANCEL;
100+ }
97101 {
98102 std::lock_guard<std::mutex> lock (mutex);
99103 lastStreamerCallbackOutput += text;
@@ -123,10 +127,11 @@ absl::Status VisualLanguageModelLegacyServable::scheduleExecution(std::shared_pt
123127 std::weak_ptr<VisualLanguageModelLegacyServableExecutionContext> weakContext = legacyExecutionContext;
124128 legacyExecutionContext->payload .client ->registerDisconnectionCallback ([weakContext]() {
125129 if (auto context = weakContext.lock ()) {
126- context->clientDisconnected = true ;
130+ context->signalDisconnection () ;
127131 }
128132 });
129133 if (legacyExecutionContext->payload .client ->isDisconnected ()) {
134+ legacyExecutionContext->signalDisconnection ();
130135 return absl::CancelledError ();
131136 }
132137 properties->legacyExecutor ->addRequest (legacyExecutionContext);
0 commit comments