首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >EasyNVR程序崩溃并报“Add called concurrently with Wait”

EasyNVR程序崩溃并报“Add called concurrently with Wait”

原创
作者头像
TSINGSEE青犀视频
发布2021-12-21 16:37:21
发布2021-12-21 16:37:21
5530
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频

EasyNVR是TSINGSEE青犀视频比较热门的产品之一,很多用于室内固定IP摄像头监控的场景都能够使用。有的开发者在使用之前可能会担心系统是否稳定?掉线是否频繁?是否支持设备重连?想了解一下的朋友们可以到我们官网 easynvr.com 阅览,也可以自主进行下载试用。EasyNVR已经是一个非常成熟的视频平台了,系统稳定,且支持二次开发,是很多视频行业监控直播的不二之选。

在一个EasyNVR现场,出现程序崩溃的问题 Add called concurrently with Wait,对应日志如下:

根据崩溃日志查看,明显能够看出是 waitGroup 结构体已经处于 Wait() 状态,但是又调用了一次 waitGroup.Add() 方法导致程序崩溃。原始代码如下:

代码语言:javascript
复制
wg := sync.WaitGroup{}

for i := 0; i < runNumber; i++ {
   go func(offlineChannel *channels.ChannelInfo) {
      defer func() {
         if p := recover(); p != nil {
            log.Error("OfflineConnecting Connecting panic, %v", p)
            log.Error("OfflineConnecting Connecting debug stack : %v", string(debug.Stack()))
         }
         wg.Done()
      }()
       wg.Add(1)

      // 开始尝试连接设备 Connecting,连接完毕后,会异步上线
      offlineChannel.Connecting()

   }(offlineChannels[alreadyRunNumber])
   
   alreadyRunNumber = alreadyRunNumber + 1
}
wg.Wait()

由程序看出,代码是在 go 协程中调用了 wg.Add(1) 方法,因此有可能在 wg.Wait() 正在运行的时候出现 go 协程中加一的操作,因此崩溃。

将 wg.Add() 不再协程中加一,代码如下:

代码语言:javascript
复制
wg := sync.WaitGroup{}

for i := 0; i < runNumber; i++ {
   wg.Add(1)
   go func(offlineChannel *channels.ChannelInfo) {
      defer func() {
         if p := recover(); p != nil {
            log.Error("OfflineConnecting Connecting panic, %v", p)
            log.Error("OfflineConnecting Connecting debug stack : %v", string(debug.Stack()))
         }
         wg.Done()
      }()

      // 开始尝试连接设备 Connecting,连接完毕后,会异步上线
      offlineChannel.Connecting()

   }(offlineChannels[alreadyRunNumber])
   
   alreadyRunNumber = alreadyRunNumber + 1
}
wg.Wait()

wg.Add(1) 放在 go 程序外侧。修改后,代码即可成功运行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档