不调用libusb_exit()会产生什么后果

What are consequences of not calling libusb_exit()

本文关键字:什么 后果 调用 libusb exit      更新时间:2023-10-16

我正在编写一个与USB视频播放控制器交互的用户空间程序。我是用C++编程的,这个程序打算在Linux上运行。在学习libusb手册时,我发现了void libusb_exit ( struct libusb_context * ctx )函数。

描述中写道:

取消初始化libusb。

应在关闭所有打开的设备后和应用程序终止。

该手册没有解释为什么需要它。我开始好奇在不调用libusb_exit()的情况下终止一个初始化并使用libusb的程序会产生什么后果。有人能解释一下,如果由于某些原因,我的程序在终止前无法调用libusb_exit(),会发生什么糟糕的事情吗?它会导致系统资源泄漏吗?

它涉及上下文

只要您有一个单用户应用程序,您通常最终会使用默认上下文。每当用户的会话被破坏时,也就是说,当你的应用程序被关闭时,这个就死了
还要注意的是,如果你的应用程序崩溃,你不能因为不调用libusb_exit而泄漏(好吧,即使泄漏是可能的,泄漏的内存也会在崩溃后立即释放,所以我不会更关心崩溃本身的原因)。

每当您有多个会话时,问题就会出现
请参阅此处和此处了解更多详细信息
如果在这种情况下调用libusb_exit失败,并且从应用程序的角度来看,会话处于已释放状态,那么您肯定会泄漏内存,因为libusb实际上不会破坏上下文。事实上,在这种情况下,软件不会关闭,但内存仍在使用中,无法再访问,因为您没有调用libusb_exit来释放它。

这就是为什么文档建议每次想要销毁上下文时都调用libusb_exit,无论是否为默认上下文。