繁体   English   中英

bluez 5.3+ 中的 Gatttool 断开连接导致 CPU 使用率非常高(Linux 蓝牙)

[英]Gatttool disconnection in bluez 5.3+ causes very high cpu usage (Linux bluetooth)

由于自定义设备上的项目限制,我正在使用向后移植到 linux 2.6 的 bluez 5.37。 我注意到 gatttool 在断开连接时会导致 CPU 使用率非常高。 这很容易复制。 在交互模式下使用 gatttool 连接到任何 BLE 设备,然后断开连接。 在您发出断开连接命令之前,CPU 使用率很好。 观察 CPU 使用率,gatttool 会超过 70-80%。 我也可以在 Ubuntu LTS 上复制它。 有没有人尝试解决这个问题? 谢谢你。

我想我发现了什么问题。 Gatttool 使用 glib 主事件循环,因此 io 通道作为源附加到默认主上下文(阅读 glib 文档以获得更多说明)。 作为 cmd_connect 'g_io_add_watch(iochannel, G_IO_HUP, channel_watcher, NULL)' 函数中的 'bluez/attrib/interactive.c' 中的示例完成。 此函数将返回一个 gsource,一旦 io 通道丢失或删除,该 gsource 必须从 watch 中删除。 如果没有这个,glib 将继续等待这个 io 通道 (fd) 并导致 EINVAL 作为返回码。 (我的知识是零散的,但我想这就是发生的事情)。 因此,当断开设备连接时,需要将手表取下。 我按照以下方式进行 - 定义一个新的全局 - guint gsrc;
将 cmd_connect 中的行更改为gsrc = g_io_add_watch(iochannel, G_IO_HUP, channel_watcher, NULL); 断开连接后,在返回之前的 disconnect_io 函数中 - g_source_remove(gsrc); 这修复了交互模式下 gatttool cpu 使用错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM