Przeglądaj źródła

[debug] handle buffer lock, incase coredump

boji123 2 lat temu
rodzic
commit
3a0cb220a0

+ 4 - 0
funasr/runtime/grpc/paraformer-server.cc

@@ -42,7 +42,9 @@ void GrpcEngine::DecodeThreadFunc() {
                                                  sampling_rate_,
                                                  sampling_rate_,
                                                  encoding_,
                                                  encoding_,
                                                  mode_);
                                                  mode_);
+      p_mutex_->lock();
       audio_buffer_ = audio_buffer_.substr(step);
       audio_buffer_ = audio_buffer_.substr(step);
+      p_mutex_->unlock();
 
 
       if (result) {
       if (result) {
         std::string online_message = FunASRGetResult(result, 0);
         std::string online_message = FunASRGetResult(result, 0);
@@ -121,7 +123,9 @@ void GrpcEngine::OnSpeechStart() {
 }
 }
 
 
 void GrpcEngine::OnSpeechData() {
 void GrpcEngine::OnSpeechData() {
+  p_mutex_->lock();
   audio_buffer_ += request_->audio_data();
   audio_buffer_ += request_->audio_data();
+  p_mutex_->unlock();
 }
 }
 
 
 void GrpcEngine::OnSpeechEnd() {
 void GrpcEngine::OnSpeechEnd() {

+ 3 - 0
funasr/runtime/grpc/paraformer-server.h

@@ -6,6 +6,7 @@
 
 
 #include <string>
 #include <string>
 #include <thread>
 #include <thread>
+#include <mutex>
 #include <unistd.h>
 #include <unistd.h>
 
 
 #include "grpcpp/server_builder.h"
 #include "grpcpp/server_builder.h"
@@ -52,6 +53,8 @@ class GrpcEngine {
   std::string encoding_;
   std::string encoding_;
   ASR_TYPE mode_ = ASR_TWO_PASS;
   ASR_TYPE mode_ = ASR_TWO_PASS;
   int step_duration_ms_ = 100;
   int step_duration_ms_ = 100;
+
+  std::unique_ptr<std::mutex> p_mutex_= std::make_unique<std::mutex>(); // mutex is not moveable
 };
 };
 
 
 class GrpcService final : public ASR::Service {
 class GrpcService final : public ASR::Service {