Blame SOURCES/0029-fpi-usb-transfer-Take-ownership-of-the-transfer-when.patch

73b847
From b789fda58d5ddf9bc8b6f2830e6fc93d222e6c34 Mon Sep 17 00:00:00 2001
73b847
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
73b847
Date: Tue, 26 Nov 2019 21:23:42 +0100
73b847
Subject: [PATCH 029/181] fpi-usb-transfer: Take ownership of the transfer when
73b847
 submitting it
73b847
73b847
When a transfer is completed, we automatically unref it since we can't
73b847
consider it valid anymore since this point.
73b847
73b847
Update the drivers not to free the transfer after submitting anymore.
73b847
---
73b847
 libfprint/drivers/aes1610.c             |  3 ---
73b847
 libfprint/drivers/aes2501.c             |  4 ----
73b847
 libfprint/drivers/aes2550.c             |  9 ---------
73b847
 libfprint/drivers/aes3k.c               |  1 -
73b847
 libfprint/drivers/aeslib.c              |  1 -
73b847
 libfprint/drivers/aesx660.c             |  2 --
73b847
 libfprint/drivers/elan.c                |  2 --
73b847
 libfprint/drivers/etes603.c             |  1 -
73b847
 libfprint/drivers/synaptics/synaptics.c |  8 +++-----
73b847
 libfprint/drivers/upeksonly.c           |  5 -----
73b847
 libfprint/drivers/upektc.c              |  6 ------
73b847
 libfprint/drivers/upektc_img.c          |  3 ---
73b847
 libfprint/drivers/upekts.c              | 11 -----------
73b847
 libfprint/drivers/uru4000.c             |  3 ---
73b847
 libfprint/drivers/vcom5s.c              |  3 ---
73b847
 libfprint/drivers/vfs0050.c             |  5 -----
73b847
 libfprint/drivers/vfs101.c              |  3 ---
73b847
 libfprint/drivers/vfs301_proto.c        | 10 +++-------
73b847
 libfprint/drivers/vfs5011.c             |  3 ---
73b847
 libfprint/fpi-usb-transfer.c            | 14 ++++----------
73b847
 20 files changed, 10 insertions(+), 87 deletions(-)
73b847
73b847
diff --git a/libfprint/drivers/aes1610.c b/libfprint/drivers/aes1610.c
73b847
index 0326565..4261b05 100644
73b847
--- a/libfprint/drivers/aes1610.c
73b847
+++ b/libfprint/drivers/aes1610.c
73b847
@@ -155,7 +155,6 @@ generic_read_ignore_data (FpiSsm *ssm, FpDevice *dev,
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            generic_ignore_data_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /****** FINGER PRESENCE DETECTION ******/
73b847
@@ -238,7 +237,6 @@ finger_det_reqs_cb (FpImageDevice *dev, GError *error,
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            finger_det_data_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -683,7 +681,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *_dev)
73b847
       transfer->short_is_error = TRUE;
73b847
       fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                capture_read_strip_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
     }
73b847
   ;
73b847
diff --git a/libfprint/drivers/aes2501.c b/libfprint/drivers/aes2501.c
73b847
index 1b59c56..e18b4fe 100644
73b847
--- a/libfprint/drivers/aes2501.c
73b847
+++ b/libfprint/drivers/aes2501.c
73b847
@@ -126,7 +126,6 @@ read_regs_rq_cb (FpImageDevice *dev, GError *error, void *user_data)
73b847
   fpi_usb_transfer_fill_bulk (transfer, EP_IN, READ_REGS_LEN);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            read_regs_data_cb, rdata);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -210,7 +209,6 @@ generic_read_ignore_data (FpiSsm *ssm, FpDevice *dev,
73b847
   fpi_usb_transfer_fill_bulk (transfer, EP_IN, bytes);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            generic_ignore_data_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /****** IMAGE PROCESSING ******/
73b847
@@ -315,7 +313,6 @@ finger_det_reqs_cb (FpImageDevice *dev, GError *error,
73b847
   fpi_usb_transfer_fill_bulk (transfer, EP_IN, FINGER_DETECTION_LEN);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            finger_det_data_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -547,7 +544,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *device)
73b847
         fpi_usb_transfer_fill_bulk (transfer, EP_IN, STRIP_CAPTURE_LEN);
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  capture_read_strip_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
         break;
73b847
       }
73b847
     }
73b847
diff --git a/libfprint/drivers/aes2550.c b/libfprint/drivers/aes2550.c
73b847
index b95b053..f3f51d6 100644
73b847
--- a/libfprint/drivers/aes2550.c
73b847
+++ b/libfprint/drivers/aes2550.c
73b847
@@ -134,7 +134,6 @@ finger_det_reqs_cb (FpiUsbTransfer *t, FpDevice *device,
73b847
   fpi_usb_transfer_fill_bulk (transfer, EP_IN, AES2550_EP_IN_BUF_SIZE);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            finger_det_data_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -157,7 +156,6 @@ start_finger_detection (FpImageDevice *dev)
73b847
                                    sizeof (finger_det_reqs), NULL);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            finger_det_reqs_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /****** CAPTURE ******/
73b847
@@ -335,7 +333,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  capture_reqs_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -347,7 +344,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->ssm = ssm;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  capture_read_data_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -363,7 +359,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  capture_set_idle_reqs_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
     }
73b847
@@ -482,7 +477,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  init_reqs_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -494,7 +488,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->ssm = ssm;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  init_read_data_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -509,7 +502,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  init_reqs_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -521,7 +513,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->ssm = ssm;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  calibrate_read_data_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
     }
73b847
diff --git a/libfprint/drivers/aes3k.c b/libfprint/drivers/aes3k.c
73b847
index f73ac02..da3b6a3 100644
73b847
--- a/libfprint/drivers/aes3k.c
73b847
+++ b/libfprint/drivers/aes3k.c
73b847
@@ -142,7 +142,6 @@ do_capture (FpImageDevice *dev)
73b847
   fpi_usb_transfer_submit (priv->img_trf, 0,
73b847
                            fpi_device_get_cancellable (FP_DEVICE (dev)),
73b847
                            img_cb, NULL);
73b847
-  fpi_usb_transfer_unref (priv->img_trf);
73b847
 }
73b847
 
73b847
 static void
73b847
diff --git a/libfprint/drivers/aeslib.c b/libfprint/drivers/aeslib.c
73b847
index 8f92d87..4839c62 100644
73b847
--- a/libfprint/drivers/aeslib.c
73b847
+++ b/libfprint/drivers/aeslib.c
73b847
@@ -88,7 +88,6 @@ do_write_regv (FpImageDevice *dev, struct write_regv_data *wdata, int upper_boun
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            write_regv_trf_complete, wdata);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* write the next batch of registers to be written, or if there are no more,
73b847
diff --git a/libfprint/drivers/aesx660.c b/libfprint/drivers/aesx660.c
73b847
index 3f13252..b4d8603 100644
73b847
--- a/libfprint/drivers/aesx660.c
73b847
+++ b/libfprint/drivers/aesx660.c
73b847
@@ -68,7 +68,6 @@ aesX660_send_cmd_timeout (FpiSsm                *ssm,
73b847
                                    cmd_len, NULL);
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, timeout, NULL, callback, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -100,7 +99,6 @@ aesX660_read_response (FpiSsm                *ssm,
73b847
   transfer->ssm = ssm;
73b847
   transfer->short_is_error = short_is_error;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, cancel, callback, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c
73b847
index 5e80be5..e2767dd 100644
73b847
--- a/libfprint/drivers/elan.c
73b847
+++ b/libfprint/drivers/elan.c
73b847
@@ -406,7 +406,6 @@ elan_cmd_read (FpiSsm *ssm, FpDevice *dev)
73b847
     cancellable = fpi_device_get_cancellable (dev);
73b847
 
73b847
   fpi_usb_transfer_submit (transfer, self->cmd_timeout, cancellable, elan_cmd_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -449,7 +448,6 @@ elan_run_cmd (FpiSsm                *ssm,
73b847
                            cancellable,
73b847
                            elan_cmd_cb,
73b847
                            NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 enum stop_capture_states {
73b847
diff --git a/libfprint/drivers/etes603.c b/libfprint/drivers/etes603.c
73b847
index 55f0139..5cd7f0b 100644
73b847
--- a/libfprint/drivers/etes603.c
73b847
+++ b/libfprint/drivers/etes603.c
73b847
@@ -710,7 +710,6 @@ async_tx (FpDevice *dev, unsigned int ep, void *cb,
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_fill_bulk_full (transfer, ep, buffer, length, NULL);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL, cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 
73b847
diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c
73b847
index 4932d01..ccaf60e 100644
73b847
--- a/libfprint/drivers/synaptics/synaptics.c
73b847
+++ b/libfprint/drivers/synaptics/synaptics.c
73b847
@@ -205,7 +205,7 @@ static void
73b847
 synaptics_cmd_run_state (FpiSsm   *ssm,
73b847
                          FpDevice *dev)
73b847
 {
73b847
-  g_autoptr(FpiUsbTransfer) transfer = NULL;
73b847
+  FpiUsbTransfer *transfer;
73b847
   FpiDeviceSynaptics *self = FPI_DEVICE_SYNAPTICS (dev);
73b847
 
73b847
   switch (fpi_ssm_get_cur_state (ssm))
73b847
@@ -219,7 +219,7 @@ synaptics_cmd_run_state (FpiSsm   *ssm,
73b847
                                    NULL,
73b847
                                    fpi_ssm_usb_transfer_cb,
73b847
                                    NULL);
73b847
-          g_clear_pointer (&self->cmd_pending_transfer, fpi_usb_transfer_unref);
73b847
+          self->cmd_pending_transfer = NULL;
73b847
         }
73b847
       else
73b847
         {
73b847
@@ -317,7 +317,7 @@ synaptics_sensor_cmd (FpiDeviceSynaptics *self,
73b847
                       gssize              payload_len,
73b847
                       SynCmdMsgCallback   callback)
73b847
 {
73b847
-  g_autoptr(FpiUsbTransfer) transfer = NULL;
73b847
+  FpiUsbTransfer *transfer;
73b847
   guint8 real_seq_num;
73b847
   gint msg_len;
73b847
   gint res;
73b847
@@ -984,7 +984,6 @@ dev_probe (FpDevice *device)
73b847
   transfer->buffer[0] = SENSOR_CMD_GET_VERSION;
73b847
   if (!fpi_usb_transfer_submit_sync (transfer, 1000, &error))
73b847
     goto err_close;
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 
73b847
 
73b847
   transfer = fpi_usb_transfer_new (device);
73b847
@@ -1039,7 +1038,6 @@ dev_probe (FpDevice *device)
73b847
   fp_dbg ("Target: %d", self->mis_version.target);
73b847
   fp_dbg ("Product: %d", self->mis_version.product);
73b847
 
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 
73b847
   /* We need at least firmware version 10.1, and for 10.1 build 2989158 */
73b847
   if (self->mis_version.version_major < 10 ||
73b847
diff --git a/libfprint/drivers/upeksonly.c b/libfprint/drivers/upeksonly.c
73b847
index e1cd7e5..f477b83 100644
73b847
--- a/libfprint/drivers/upeksonly.c
73b847
+++ b/libfprint/drivers/upeksonly.c
73b847
@@ -635,7 +635,6 @@ write_regs_iterate (struct write_regs_data *wrdata)
73b847
   transfer->short_is_error = TRUE;
73b847
   transfer->ssm = wrdata->ssm;
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, write_regs_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 
73b847
   transfer->buffer[0] = regwrite->value;
73b847
 }
73b847
@@ -688,7 +687,6 @@ sm_write_reg (FpiSsm        *ssm,
73b847
   transfer->short_is_error = TRUE;
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, sm_write_reg_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 
73b847
   transfer->buffer[0] = value;
73b847
 }
73b847
@@ -737,7 +735,6 @@ sm_read_reg (FpiSsm        *ssm,
73b847
                            NULL,
73b847
                            sm_read_reg_cb,
73b847
                            NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -782,7 +779,6 @@ sm_await_intr (FpiSsm        *ssm,
73b847
                            fpi_device_get_cancellable (FP_DEVICE (dev)),
73b847
                            sm_await_intr_cb,
73b847
                            NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /***** AWAIT FINGER *****/
73b847
@@ -1419,7 +1415,6 @@ dev_activate (FpImageDevice *dev)
73b847
   self->deactivating = FALSE;
73b847
   self->capturing = FALSE;
73b847
 
73b847
-  self->img_transfers = g_ptr_array_new_full (NUM_BULK_TRANSFERS, (GDestroyNotify) fpi_usb_transfer_unref);
73b847
   self->num_flying = 0;
73b847
 
73b847
   for (i = 0; i < self->img_transfers->len; i++)
73b847
diff --git a/libfprint/drivers/upektc.c b/libfprint/drivers/upektc.c
73b847
index e1254ce..92b1930 100644
73b847
--- a/libfprint/drivers/upektc.c
73b847
+++ b/libfprint/drivers/upektc.c
73b847
@@ -128,7 +128,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  write_init_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -142,7 +141,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->ssm = ssm;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  read_init_data_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
     }
73b847
@@ -225,7 +223,6 @@ finger_det_cmd_cb (FpiUsbTransfer *t, FpDevice *device,
73b847
                               IMAGE_SIZE);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            finger_det_data_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -249,7 +246,6 @@ start_finger_detection (FpImageDevice *dev)
73b847
                                    UPEKTC_CMD_LEN, NULL);
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            finger_det_cmd_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /****** CAPTURE ******/
73b847
@@ -309,7 +305,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *_dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  capture_cmd_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
@@ -323,7 +318,6 @@ capture_run_state (FpiSsm *ssm, FpDevice *_dev)
73b847
         transfer->short_is_error = TRUE;
73b847
         fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                                  capture_read_data_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
     }
73b847
diff --git a/libfprint/drivers/upektc_img.c b/libfprint/drivers/upektc_img.c
73b847
index 28a709f..b9724c1 100644
73b847
--- a/libfprint/drivers/upektc_img.c
73b847
+++ b/libfprint/drivers/upektc_img.c
73b847
@@ -100,7 +100,6 @@ upektc_img_submit_req (FpiSsm                *ssm,
73b847
   transfer->ssm = ssm;
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL, cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -120,7 +119,6 @@ upektc_img_read_data (FpiSsm                *ssm,
73b847
                                    NULL);
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL, cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /****** CAPTURE ******/
73b847
@@ -557,7 +555,6 @@ activate_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->ssm = ssm;
73b847
         fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL,
73b847
                                  init_reqs_ctrl_cb, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
       }
73b847
       break;
73b847
 
73b847
diff --git a/libfprint/drivers/upekts.c b/libfprint/drivers/upekts.c
73b847
index 4bc6556..05cd9c5 100644
73b847
--- a/libfprint/drivers/upekts.c
73b847
+++ b/libfprint/drivers/upekts.c
73b847
@@ -226,7 +226,6 @@ busy_ack_retry_read (FpDevice *device, struct read_msg_data *udata)
73b847
   transfer->short_is_error = TRUE;
73b847
 
73b847
   fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, busy_ack_sent_cb, udata);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* Returns 0 if message was handled, 1 if it was a device-busy message, and
73b847
@@ -416,7 +415,6 @@ read_msg_cb (FpiUsbTransfer *transfer, FpDevice *device,
73b847
       fpi_usb_transfer_submit (etransfer, TIMEOUT,
73b847
                                NULL,
73b847
                                read_msg_extend_cb, udata);
73b847
-      fpi_usb_transfer_unref (etransfer);
73b847
       return;
73b847
     }
73b847
 
73b847
@@ -442,7 +440,6 @@ __read_msg_async (FpDevice *device, struct read_msg_data *udata)
73b847
 
73b847
   fpi_usb_transfer_fill_bulk_full (transfer, EP_IN, udata->buffer, udata->buflen, NULL);
73b847
   fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, read_msg_cb, udata);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -676,7 +673,6 @@ initsm_send_msg28_handler (FpiSsm              *ssm,
73b847
   transfer->ssm = ssm;
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, fpi_ssm_usb_transfer_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -697,7 +693,6 @@ initsm_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
       transfer->ssm = ssm;
73b847
       transfer->short_is_error = TRUE;
73b847
       fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, fpi_ssm_usb_transfer_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
 
73b847
     case READ_MSG03:
73b847
@@ -709,7 +704,6 @@ initsm_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
       transfer->ssm = ssm;
73b847
       transfer->short_is_error = TRUE;
73b847
       fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, fpi_ssm_usb_transfer_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
 
73b847
     case READ_MSG05:
73b847
@@ -820,7 +814,6 @@ deinitsm_state_handler (FpiSsm *ssm, FpDevice *dev)
73b847
       transfer->short_is_error = TRUE;
73b847
       transfer->ssm = ssm;
73b847
       fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, fpi_ssm_usb_transfer_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
 
73b847
     case READ_MSG01:;
73b847
@@ -953,7 +946,6 @@ enroll_start_sm_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
       transfer->ssm = ssm;
73b847
 
73b847
       fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, fpi_ssm_usb_transfer_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
 
73b847
     case READ_ENROLL_MSG28:;
73b847
@@ -1205,7 +1197,6 @@ enroll_iterate (FpDevice *dev)
73b847
   transfer->short_is_error = TRUE;
73b847
 
73b847
   fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, enroll_iterate_cmd_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -1319,7 +1310,6 @@ verify_start_sm_run_state (FpiSsm *ssm, FpDevice *dev)
73b847
       transfer->short_is_error = TRUE;
73b847
       transfer->ssm = ssm;
73b847
       fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, fpi_ssm_usb_transfer_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
 
73b847
       break;
73b847
     }
73b847
@@ -1519,7 +1509,6 @@ verify_iterate (FpDevice *dev)
73b847
       transfer->short_is_error = TRUE;
73b847
 
73b847
       fpi_usb_transfer_submit (transfer, TIMEOUT, NULL, verify_wr2800_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
     }
73b847
 }
73b847
 
73b847
diff --git a/libfprint/drivers/uru4000.c b/libfprint/drivers/uru4000.c
73b847
index 89328d0..7e28724 100644
73b847
--- a/libfprint/drivers/uru4000.c
73b847
+++ b/libfprint/drivers/uru4000.c
73b847
@@ -181,7 +181,6 @@ write_regs (FpImageDevice *dev, uint16_t first_reg,
73b847
                                  num_regs);
73b847
   memcpy (transfer->buffer, values, num_regs);
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, callback, user_data);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -207,7 +206,6 @@ read_regs (FpImageDevice *dev, uint16_t first_reg,
73b847
                                  G_USB_DEVICE_RECIPIENT_DEVICE,
73b847
                                  USB_RQ, first_reg, 0, num_regs);
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, callback, user_data);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /*
73b847
@@ -365,7 +363,6 @@ start_irq_handler (FpImageDevice *dev)
73b847
                               EP_INTR,
73b847
                               IRQ_LENGTH);
73b847
   fpi_usb_transfer_submit (transfer, 0, self->irq_cancellable, irq_handler, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
diff --git a/libfprint/drivers/vcom5s.c b/libfprint/drivers/vcom5s.c
73b847
index edd2dd4..1a2b795 100644
73b847
--- a/libfprint/drivers/vcom5s.c
73b847
+++ b/libfprint/drivers/vcom5s.c
73b847
@@ -103,7 +103,6 @@ sm_write_reg (FpiSsm       *ssm,
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, sm_write_reg_cb,
73b847
                            NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void
73b847
@@ -133,7 +132,6 @@ sm_exec_cmd (FpiSsm       *ssm,
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, sm_exec_cmd_cb,
73b847
                            NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /***** FINGER DETECTION *****/
73b847
@@ -227,7 +225,6 @@ capture_iterate (FpiSsm   *ssm,
73b847
                                    NULL);
73b847
 
73b847
   fpi_usb_transfer_submit (transfer, CTRL_TIMEOUT, NULL, capture_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 
73b847
diff --git a/libfprint/drivers/vfs0050.c b/libfprint/drivers/vfs0050.c
73b847
index 1be272b..43252c0 100644
73b847
--- a/libfprint/drivers/vfs0050.c
73b847
+++ b/libfprint/drivers/vfs0050.c
73b847
@@ -56,7 +56,6 @@ async_write (FpiSsm   *ssm,
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, VFS_USB_TIMEOUT, NULL,
73b847
                            async_write_callback, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* Callback for async_read */
73b847
@@ -108,7 +107,6 @@ async_read (FpiSsm   *ssm,
73b847
 
73b847
   fpi_usb_transfer_submit (transfer, VFS_USB_TIMEOUT, NULL,
73b847
                            async_read_callback, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* Callback for async_abort */
73b847
@@ -160,7 +158,6 @@ async_abort (FpDevice *dev, FpiSsm *ssm, int ep)
73b847
 
73b847
   fpi_usb_transfer_submit (transfer, VFS_USB_ABORT_TIMEOUT, NULL,
73b847
                            async_abort_callback, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* Image processing functions */
73b847
@@ -564,7 +561,6 @@ activate_ssm (FpiSsm *ssm, FpDevice *dev)
73b847
                                  0,
73b847
                                  fpi_device_get_cancellable (dev),
73b847
                                  interrupt_callback, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
 
73b847
         /* I've put it here to be sure that data is cleared */
73b847
         clear_data (self);
73b847
@@ -614,7 +610,6 @@ activate_ssm (FpiSsm *ssm, FpDevice *dev)
73b847
         transfer->ssm = ssm;
73b847
         fpi_usb_transfer_submit (transfer, VFS_USB_TIMEOUT, NULL,
73b847
                                  receive_callback, NULL);
73b847
-        fpi_usb_transfer_unref (transfer);
73b847
         break;
73b847
       }
73b847
 
73b847
diff --git a/libfprint/drivers/vfs101.c b/libfprint/drivers/vfs101.c
73b847
index 9ca1b0a..5dedab7 100644
73b847
--- a/libfprint/drivers/vfs101.c
73b847
+++ b/libfprint/drivers/vfs101.c
73b847
@@ -219,7 +219,6 @@ async_send (FpiSsm        *ssm,
73b847
   transfer->short_is_error = TRUE;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            async_send_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* Callback of asynchronous recv */
73b847
@@ -282,7 +281,6 @@ async_recv (FpiSsm        *ssm,
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            async_recv_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 static void async_load (FpiSsm        *ssm,
73b847
@@ -369,7 +367,6 @@ async_load (FpiSsm        *ssm,
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, BULK_TIMEOUT, NULL,
73b847
                            async_load_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /* Submit asynchronous sleep */
73b847
diff --git a/libfprint/drivers/vfs301_proto.c b/libfprint/drivers/vfs301_proto.c
73b847
index 5d02597..103e890 100644
73b847
--- a/libfprint/drivers/vfs301_proto.c
73b847
+++ b/libfprint/drivers/vfs301_proto.c
73b847
@@ -67,8 +67,7 @@ static void
73b847
 usb_recv (FpDeviceVfs301 *dev, guint8 endpoint, int max_bytes, FpiUsbTransfer **out, GError **error)
73b847
 {
73b847
   GError *err = NULL;
73b847
-
73b847
-  g_autoptr(FpiUsbTransfer) transfer = NULL;
73b847
+  FpiUsbTransfer *transfer;
73b847
 
73b847
   /* XXX: This function swallows any transfer errors, that is obviously
73b847
    *      quite bad (it used to assert on no-error)! */
73b847
@@ -98,8 +97,7 @@ static void
73b847
 usb_send (FpDeviceVfs301 *dev, const guint8 *data, gssize length, GError **error)
73b847
 {
73b847
   GError *err = NULL;
73b847
-
73b847
-  g_autoptr(FpiUsbTransfer) transfer = NULL;
73b847
+  FpiUsbTransfer *transfer = NULL;
73b847
 
73b847
   /* XXX: This function swallows any transfer errors, that is obviously
73b847
    *      quite bad (it used to assert on no-error)! */
73b847
@@ -471,7 +469,7 @@ int
73b847
 vfs301_proto_peek_event (FpDeviceVfs301 *dev)
73b847
 {
73b847
   g_autoptr(GError) error = NULL;
73b847
-  g_autoptr(FpiUsbTransfer) transfer = NULL;
73b847
+  FpiUsbTransfer *transfer;
73b847
 
73b847
   const char no_event[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
73b847
   const char got_event[] = {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00};
73b847
@@ -540,7 +538,6 @@ vfs301_proto_process_event_cb (FpiUsbTransfer *transfer,
73b847
       fpi_usb_transfer_fill_bulk (new, VFS301_RECEIVE_ENDPOINT_DATA, VFS301_FP_RECV_LEN_2);
73b847
       fpi_usb_transfer_submit (new, VFS301_FP_RECV_TIMEOUT, NULL,
73b847
                                vfs301_proto_process_event_cb, NULL);
73b847
-      fpi_usb_transfer_unref (new);
73b847
       return;
73b847
     }
73b847
 }
73b847
@@ -580,7 +577,6 @@ vfs301_proto_process_event_start (FpDeviceVfs301 *dev)
73b847
   fpi_usb_transfer_fill_bulk (transfer, VFS301_RECEIVE_ENDPOINT_DATA, VFS301_FP_RECV_LEN_1);
73b847
   fpi_usb_transfer_submit (transfer, VFS301_FP_RECV_TIMEOUT, NULL,
73b847
                            vfs301_proto_process_event_cb, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 int
73b847
diff --git a/libfprint/drivers/vfs5011.c b/libfprint/drivers/vfs5011.c
73b847
index 007e486..dbf8276 100644
73b847
--- a/libfprint/drivers/vfs5011.c
73b847
+++ b/libfprint/drivers/vfs5011.c
73b847
@@ -168,7 +168,6 @@ usbexchange_loop (FpiSsm *ssm, FpDevice *_dev)
73b847
       transfer->short_is_error = TRUE;
73b847
       fpi_usb_transfer_submit (transfer, data->timeout, NULL,
73b847
                                async_send_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
 
73b847
     case ACTION_RECEIVE:
73b847
@@ -180,7 +179,6 @@ usbexchange_loop (FpiSsm *ssm, FpDevice *_dev)
73b847
       transfer->ssm = ssm;
73b847
       fpi_usb_transfer_submit (transfer, data->timeout, NULL,
73b847
                                async_recv_cb, NULL);
73b847
-      fpi_usb_transfer_unref (transfer);
73b847
       break;
73b847
 
73b847
     default:
73b847
@@ -466,7 +464,6 @@ capture_chunk_async (FpDeviceVfs5011 *self,
73b847
   transfer->ssm = ssm;
73b847
   fpi_usb_transfer_submit (transfer, timeout, fpi_device_get_cancellable (FP_DEVICE (self)),
73b847
                            chunk_capture_callback, NULL);
73b847
-  fpi_usb_transfer_unref (transfer);
73b847
 }
73b847
 
73b847
 /*
73b847
diff --git a/libfprint/fpi-usb-transfer.c b/libfprint/fpi-usb-transfer.c
73b847
index 6b29621..64d706f 100644
73b847
--- a/libfprint/fpi-usb-transfer.c
73b847
+++ b/libfprint/fpi-usb-transfer.c
73b847
@@ -356,7 +356,7 @@ transfer_finish_cb (GObject *source_object, GAsyncResult *res, gpointer user_dat
73b847
 
73b847
 /**
73b847
  * fpi_usb_transfer_submit:
73b847
- * @transfer: The transfer to submit, must have been filled.
73b847
+ * @transfer: (transfer full): The transfer to submit, must have been filled.
73b847
  * @timeout_ms: Timeout for the transfer in ms
73b847
  * @cancellable: Cancellable to use, e.g. fpi_device_get_cancellable()
73b847
  * @callback: Callback on completion or error
73b847
@@ -364,10 +364,9 @@ transfer_finish_cb (GObject *source_object, GAsyncResult *res, gpointer user_dat
73b847
  *
73b847
  * Submit a USB transfer with a specific timeout and callback functions.
73b847
  *
73b847
- * Note that #FpiUsbTransfer is owned by the user. In most cases, you
73b847
- * should call fpi_usb_transfer_unref() just after calling this function.
73b847
- * Doing so means that all associated data will be free'ed automatically
73b847
- * after the callback ran.
73b847
+ * Note that #FpiUsbTransfer will be stolen when this function is called.
73b847
+ * So that all associated data will be free'ed automatically, after the
73b847
+ * callback ran unless fpi_usb_transfer_ref() is explictly called.
73b847
  */
73b847
 void
73b847
 fpi_usb_transfer_submit (FpiUsbTransfer        *transfer,
73b847
@@ -385,11 +384,6 @@ fpi_usb_transfer_submit (FpiUsbTransfer        *transfer,
73b847
   transfer->callback = callback;
73b847
   transfer->user_data = user_data;
73b847
 
73b847
-  /* Grab a reference, this means that one can simply unref after submit and
73b847
-   * trust for the data to disappear without explicit management by the callback
73b847
-   * function. */
73b847
-  fpi_usb_transfer_ref (transfer);
73b847
-
73b847
   log_transfer (transfer, TRUE, NULL);
73b847
 
73b847
   switch (transfer->type)
73b847
-- 
73b847
2.24.1
73b847