From 54ea1c13885725584a6a50d520f67e8a75f85b6f Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 19 八月 2019 11:33:13 +0800
Subject: [PATCH] fix rec

---
 csrc/buz/recorder.cpp |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/csrc/buz/recorder.cpp b/csrc/buz/recorder.cpp
index 1dd71ab..2da437c 100644
--- a/csrc/buz/recorder.cpp
+++ b/csrc/buz/recorder.cpp
@@ -3,6 +3,7 @@
 
 #include <thread>
 #include <unistd.h>
+#include <chrono>
 
 extern "C"{
 #include <libavcodec/avcodec.h>
@@ -32,6 +33,7 @@
         ,file_path_("")
         ,func_rec_info_(nullptr)
         ,thrd_(nullptr)
+        ,error_occured_(false)
         {
             // logIt("RECODER ID: %s", id_.c_str());
         }
@@ -41,8 +43,11 @@
             try
             {
                 if (thrd_){
-                    stop_recorder_.store(true);
-                    cv_.notify_one();
+                    {
+                        std::unique_lock<std::mutex> locker(mutex_pkt_);
+                        stop_recorder_.store(true);
+                        cv_.notify_one();
+                    }
                     thrd_->join();
                     logIt("REC THREAD JOINED, QUIT!!!");
                 }
@@ -138,9 +143,15 @@
                 std::list<avpacket> pkts;
                 {
                     std::unique_lock<std::mutex> locker(mutex_pkt_);
-                    cv_.wait(locker,[&]{
+                    auto status = cv_.wait_for(locker, std::chrono::seconds(10), [&]{
                         return !list_pkt_.empty() || stop_recorder_.load();
                     });
+
+                    if (!status){
+                        end_writer();
+                        error_occured_ = true;
+                        break;
+                    }
                     if(stop_recorder_.load()){
                         end_writer();
                         break;

--
Gitblit v1.8.0