]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Fix data race
authorqydysky <qydysky@foxmail.com>
Thu, 7 Sep 2023 01:02:46 +0000 (09:02 +0800)
committerqydysky <qydysky@foxmail.com>
Thu, 7 Sep 2023 01:02:46 +0000 (09:02 +0800)
Reply/stream.go
bili_danmu.go

index 2cf078bc196f0c7ade807c4a2054932f0e8f9a48..97200dbb38550c3372281047b127f16695d76639 100644 (file)
@@ -1195,8 +1195,11 @@ func (t *M4SStream) Start() bool {
                t.log.L(`I: `, `初始化录制(`+strconv.Itoa(t.common.Roomid)+`)`)
 
                defer t.log.L(`I: `, `结束录制(`+strconv.Itoa(t.common.Roomid)+`)`)
-               defer t.exitSign.Done()
-               defer t.Status.Done()
+               defer func() {
+                       // use anonymous func avoid data race and unexpect sign wait
+                       t.Status.Done()
+                       t.exitSign.Done()
+               }()
 
                // 初始化请求池
                t.reqPool = t.common.ReqPool
index 073d650ba07fd5b67297307132d6c08accaa288d..3823438798e6f497ec3615cf48ca94a530d3af3d 100644 (file)
@@ -129,7 +129,7 @@ func Start() {
                        defer cancelfunc()
                }
 
-               for exit_sign := true; exit_sign; {
+               for exitSign := false; !exitSign; {
                        if c.C.Roomid == 0 {
                                fmt.Println("回车查看指令")
                                ctx, cancel := context.WithCancel(context.Background())
@@ -137,7 +137,7 @@ func Start() {
                                select {
                                case <-c:
                                case <-interrupt_chan:
-                                       exit_sign = false
+                                       exitSign = true
                                }
                                cancel1()
                                cancel()
@@ -145,7 +145,7 @@ func Start() {
                                fmt.Print("房间号: ", strconv.Itoa(c.C.Roomid), "\n")
                        }
 
-                       if !exit_sign {
+                       if exitSign {
                                break
                        }
 
@@ -297,7 +297,7 @@ func Start() {
                                        var cancelfunc = c.C.Danmu_Main_mq.Pull_tag(msgq.FuncMap{
                                                `interrupt`: func(_ any) (disable bool) {
                                                        exitloop = true
-                                                       exit_sign = false
+                                                       exitSign = true
                                                        ws_c.Close()
                                                        danmulog.L(`I: `, "停止,等待服务器断开连接")
                                                        reply.StreamOStop(-1) //停止录制