不调用libusb_exit()

时间:2016-04-29 19:16:32

标签: c++ linux c++14 libusb

我正在编写一个与USB视频播放控制器交互的用户空间程序。我使用C ++编程,该程序旨在在Linux上运行。在研究libusb手册时,我遇到了void libusb_exit ( struct libusb_context * ctx )函数。

说明says

  

取消初始化libusb。

     

应在关闭所有打开的设备之后和之前调用   申请终止。

手册没有解释为什么需要它。我对终止已经初始化并使用libusb而不调用libusb_exit()的程序的后果感到好奇。如果由于某些原因我的程序在终止之前无法调用libusb_exit(),有人可以解释可能会发生什么坏事吗?它会导致系统资源泄漏吗?

1 个答案:

答案 0 :(得分:3)

这涉及上下文

只要您拥有单个用户应用程序,通常最终会使用默认上下文。每当用户的会话被销毁时,那个人就会死亡,这可能是你的申请被关闭的时候 另请注意,如果您的应用程序崩溃,请不要仅仅因为没有调用libusb_exit而泄漏(即使可能发生泄漏,泄漏的内存也会立即释放)在崩溃之后,所以我不会关心崩溃本身的原因。

只要您有多个会话,就会出现问题 有关详细信息,请参阅herehere 如果你在这种情况下调用libusb_exit失败并且从你的应用程序的角度来看会话处于发布的状态,你肯定会泄漏内存,因为上下文赢了# 39;实际上被libusb摧毁了。实际上,在这种情况下,软件不会被关闭,但该内存仍在使用中且无法再访问,因为您没有调用libusb_exit来释放它。

这就是为什么文档建议每次要破坏上下文时调用libusb_exit的原因,无论是否为默认上下文。