boardd: fix context leak in init_usb_ctx (#22472)

old-commit-hash: 43d9478740
commatwo_master
Willem Melching 4 years ago committed by GitHub
parent a8a493afc6
commit 6762c152de
  1. 14
      selfdrive/boardd/panda.cc

@ -11,17 +11,19 @@
#include "selfdrive/common/swaglog.h" #include "selfdrive/common/swaglog.h"
#include "selfdrive/common/util.h" #include "selfdrive/common/util.h"
static int init_usb_ctx(libusb_context *context) { static int init_usb_ctx(libusb_context **context) {
int err = libusb_init(&context); assert(context != nullptr);
int err = libusb_init(context);
if (err != 0) { if (err != 0) {
LOGE("libusb initialization error"); LOGE("libusb initialization error");
return err; return err;
} }
#if LIBUSB_API_VERSION >= 0x01000106 #if LIBUSB_API_VERSION >= 0x01000106
libusb_set_option(context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO); libusb_set_option(*context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO);
#else #else
libusb_set_debug(context, 3); libusb_set_debug(*context, 3);
#endif #endif
return err; return err;
@ -32,7 +34,7 @@ Panda::Panda(std::string serial) {
// init libusb // init libusb
ssize_t num_devices; ssize_t num_devices;
libusb_device **dev_list = NULL; libusb_device **dev_list = NULL;
int err = init_usb_ctx(ctx); int err = init_usb_ctx(&ctx);
if (err != 0) { goto fail; } if (err != 0) { goto fail; }
// connect by serial // connect by serial
@ -113,7 +115,7 @@ std::vector<std::string> Panda::list() {
libusb_device **dev_list = NULL; libusb_device **dev_list = NULL;
std::vector<std::string> serials; std::vector<std::string> serials;
int err = init_usb_ctx(context); int err = init_usb_ctx(&context);
if (err != 0) { return serials; } if (err != 0) { return serials; }
num_devices = libusb_get_device_list(context, &dev_list); num_devices = libusb_get_device_list(context, &dev_list);

Loading…
Cancel
Save