X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb/blobdiff_plain/153e04b395bd05c23a8c65eca6425561d56e881e..4a8a2269f615db1d1e98e2214fea8c93bca4f7a5:/hmcfgusb.c diff --git a/hmcfgusb.c b/hmcfgusb.c index bfe0369..7ec0714 100644 --- a/hmcfgusb.c +++ b/hmcfgusb.c @@ -225,7 +225,17 @@ static void LIBUSB_CALL hmcfgusb_interrupt(struct libusb_transfer *transfer) if (cb_data && cb_data->cb) { if (debug) hexdump(transfer->buffer, transfer->actual_length, "USB > "); - cb_data->cb(transfer->buffer, transfer->actual_length, cb_data->data); + + if (!cb_data->cb(transfer->buffer, transfer->actual_length, cb_data->data)) { + quit = EIO; + + if (cb_data && cb_data->dev && cb_data->dev->transfer) { + libusb_free_transfer(cb_data->dev->transfer); + cb_data->dev->transfer = NULL; + } + + return; + } } else { hexdump(transfer->buffer, transfer->actual_length, "> "); } @@ -234,7 +244,6 @@ static void LIBUSB_CALL hmcfgusb_interrupt(struct libusb_transfer *transfer) err = libusb_submit_transfer(transfer); if (err != 0) { fprintf(stderr, "Can't re-submit transfer: %s\n", usb_strerror(err)); - free(transfer->buffer); libusb_free_transfer(transfer); } }