+static void free_transfer(struct libusb_transfer *transfer)
+{
+ struct context *ctx = transfer->user_data;
+
+ g_free(transfer->buffer);
+ transfer->buffer = NULL;
+ libusb_free_transfer(transfer);
+
+ ctx->submitted_transfers--;
+ if (ctx->submitted_transfers == 0)
+ finish_acquisition(ctx);
+
+}
+
+static void resubmit_transfer(struct libusb_transfer *transfer)
+{
+ uint8_t *new_buf;
+
+ /* Increase buffer size to 4096 */
+ if (transfer->length != 4096) {
+ new_buf = g_try_malloc(4096);
+ /* If allocation of the new buffer fails, just vdo not bother and
+ * continue to use the old one. */
+ if (new_buf) {
+ g_free(transfer->buffer);
+ transfer->buffer = new_buf;
+ transfer->length = 4096;
+ }
+ }
+
+ if (libusb_submit_transfer(transfer) != 0) {
+ free_transfer(transfer);
+ /* TODO: Stop session? */
+ /* TODO: Better error message. */
+ sr_err("fx2lafw: %s: libusb_submit_transfer error.", __func__);
+ }
+}
+