207 lines
8.1 KiB
Diff
207 lines
8.1 KiB
Diff
From 9f9a94d7a0c18dd62794f0172d3a306d2f38c4fd Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
|
|
Date: Fri, 22 Nov 2019 17:11:29 +0100
|
|
Subject: [PATCH 057/181] fpi-device: Make possible to set a DestroyNotify for
|
|
timeout data
|
|
|
|
Since GSource data can be automatically cleaned up on source destruction, we
|
|
can mimic this for the devices timeout easily as well.
|
|
|
|
Add an extra parameter, and let's use this cocci file to adapt all the
|
|
drivers like magic:
|
|
|
|
@@
|
|
expression e1, e2, e3, e4;
|
|
@@
|
|
fpi_device_add_timeout (e1, e2, e3, e4
|
|
+ , NULL
|
|
)
|
|
---
|
|
libfprint/drivers/elan.c | 4 ++--
|
|
libfprint/drivers/uru4000.c | 6 +++---
|
|
libfprint/drivers/vfs0050.c | 4 ++--
|
|
libfprint/drivers/vfs101.c | 2 +-
|
|
libfprint/drivers/vfs301.c | 2 +-
|
|
libfprint/drivers/vfs5011.c | 2 +-
|
|
libfprint/fp-device.c | 14 ++++++++------
|
|
libfprint/fpi-device.h | 10 +++++-----
|
|
8 files changed, 23 insertions(+), 21 deletions(-)
|
|
|
|
diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c
|
|
index e2767dd..f9e8763 100644
|
|
--- a/libfprint/drivers/elan.c
|
|
+++ b/libfprint/drivers/elan.c
|
|
@@ -756,7 +756,7 @@ calibrate_run_state (FpiSsm *ssm, FpDevice *dev)
|
|
self->calib_status = 0x01;
|
|
timeout = fpi_device_add_timeout (dev, 50,
|
|
fpi_ssm_next_state_timeout_cb,
|
|
- ssm);
|
|
+ ssm, NULL);
|
|
g_source_set_name (timeout, "calibrate_run_state");
|
|
}
|
|
break;
|
|
@@ -1020,7 +1020,7 @@ dev_change_state (FpImageDevice *dev, FpImageDeviceState state)
|
|
self->dev_state_next = state;
|
|
timeout = fpi_device_add_timeout (FP_DEVICE (dev), 10,
|
|
elan_change_state_async,
|
|
- NULL);
|
|
+ NULL, NULL);
|
|
|
|
name = g_strdup_printf ("dev_change_state to %d", state);
|
|
g_source_set_name (timeout, name);
|
|
diff --git a/libfprint/drivers/uru4000.c b/libfprint/drivers/uru4000.c
|
|
index 7e28724..1deadd3 100644
|
|
--- a/libfprint/drivers/uru4000.c
|
|
+++ b/libfprint/drivers/uru4000.c
|
|
@@ -875,7 +875,7 @@ rebootpwr_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
break;
|
|
|
|
case REBOOTPWR_PAUSE:
|
|
- fpi_device_add_timeout (_dev, 10, rebootpwr_pause_cb, ssm);
|
|
+ fpi_device_add_timeout (_dev, 10, rebootpwr_pause_cb, ssm, NULL);
|
|
break;
|
|
}
|
|
}
|
|
@@ -971,7 +971,7 @@ powerup_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
break;
|
|
|
|
case POWERUP_PAUSE:
|
|
- fpi_device_add_timeout (_dev, 10, powerup_pause_cb, ssm);
|
|
+ fpi_device_add_timeout (_dev, 10, powerup_pause_cb, ssm, NULL);
|
|
break;
|
|
|
|
case POWERUP_CHALLENGE_RESPONSE:
|
|
@@ -1130,7 +1130,7 @@ init_run_state (FpiSsm *ssm, FpDevice *_dev)
|
|
self->scanpwr_irq_timeout = fpi_device_add_timeout (_dev,
|
|
300,
|
|
init_scanpwr_timeout,
|
|
- ssm);
|
|
+ ssm, NULL);
|
|
break;
|
|
|
|
case INIT_DONE:
|
|
diff --git a/libfprint/drivers/vfs0050.c b/libfprint/drivers/vfs0050.c
|
|
index 43252c0..6377639 100644
|
|
--- a/libfprint/drivers/vfs0050.c
|
|
+++ b/libfprint/drivers/vfs0050.c
|
|
@@ -619,7 +619,7 @@ activate_ssm (FpiSsm *ssm, FpDevice *dev)
|
|
|
|
/* Wait for probable vdev->active changing */
|
|
fpi_device_add_timeout (dev, VFS_SSM_TIMEOUT,
|
|
- fpi_ssm_next_state_timeout_cb, ssm);
|
|
+ fpi_ssm_next_state_timeout_cb, ssm, NULL);
|
|
break;
|
|
|
|
case SSM_NEXT_RECEIVE:
|
|
@@ -639,7 +639,7 @@ activate_ssm (FpiSsm *ssm, FpDevice *dev)
|
|
case SSM_WAIT_ANOTHER_SCAN:
|
|
/* Orange light is on now */
|
|
fpi_device_add_timeout (dev, VFS_SSM_ORANGE_TIMEOUT,
|
|
- another_scan, ssm);
|
|
+ another_scan, ssm, NULL);
|
|
break;
|
|
|
|
default:
|
|
diff --git a/libfprint/drivers/vfs101.c b/libfprint/drivers/vfs101.c
|
|
index 5dedab7..0df9b73 100644
|
|
--- a/libfprint/drivers/vfs101.c
|
|
+++ b/libfprint/drivers/vfs101.c
|
|
@@ -376,7 +376,7 @@ async_sleep (unsigned int msec,
|
|
FpImageDevice *dev)
|
|
{
|
|
fpi_device_add_timeout (FP_DEVICE (dev), msec,
|
|
- fpi_ssm_next_state_timeout_cb, ssm);
|
|
+ fpi_ssm_next_state_timeout_cb, ssm, NULL);
|
|
}
|
|
|
|
/* Swap ssm states */
|
|
diff --git a/libfprint/drivers/vfs301.c b/libfprint/drivers/vfs301.c
|
|
index 7219792..1d0f066 100644
|
|
--- a/libfprint/drivers/vfs301.c
|
|
+++ b/libfprint/drivers/vfs301.c
|
|
@@ -36,7 +36,7 @@ async_sleep (unsigned int msec,
|
|
{
|
|
/* Add timeout */
|
|
fpi_device_add_timeout (FP_DEVICE (dev), msec,
|
|
- fpi_ssm_next_state_timeout_cb, ssm);
|
|
+ fpi_ssm_next_state_timeout_cb, ssm, NULL);
|
|
}
|
|
|
|
static int
|
|
diff --git a/libfprint/drivers/vfs5011.c b/libfprint/drivers/vfs5011.c
|
|
index dbf8276..4fac03c 100644
|
|
--- a/libfprint/drivers/vfs5011.c
|
|
+++ b/libfprint/drivers/vfs5011.c
|
|
@@ -706,7 +706,7 @@ activate_loop (FpiSsm *ssm, FpDevice *_dev)
|
|
case DEV_ACTIVATE_DATA_COMPLETE:
|
|
fpi_device_add_timeout (_dev, 1,
|
|
fpi_ssm_next_state_timeout_cb,
|
|
- ssm);
|
|
+ ssm, NULL);
|
|
|
|
break;
|
|
|
|
diff --git a/libfprint/fp-device.c b/libfprint/fp-device.c
|
|
index 0a1f8de..182be51 100644
|
|
--- a/libfprint/fp-device.c
|
|
+++ b/libfprint/fp-device.c
|
|
@@ -1475,7 +1475,8 @@ fpi_device_set_scan_type (FpDevice *device,
|
|
* @device: The #FpDevice
|
|
* @interval: The interval in milliseconds
|
|
* @func: The #FpTimeoutFunc to call on timeout
|
|
- * @user_data: User data to pass to the callback
|
|
+ * @user_data: (nullable): User data to pass to the callback
|
|
+ * @destroy_notify: (nullable): #GDestroyNotify for @user_data
|
|
*
|
|
* Register a timeout to run. Drivers should always make sure that timers are
|
|
* cancelled when appropriate.
|
|
@@ -1483,10 +1484,11 @@ fpi_device_set_scan_type (FpDevice *device,
|
|
* Returns: (transfer none): A newly created and attached #GSource
|
|
*/
|
|
GSource *
|
|
-fpi_device_add_timeout (FpDevice *device,
|
|
- gint interval,
|
|
- FpTimeoutFunc func,
|
|
- gpointer user_data)
|
|
+fpi_device_add_timeout (FpDevice *device,
|
|
+ gint interval,
|
|
+ FpTimeoutFunc func,
|
|
+ gpointer user_data,
|
|
+ GDestroyNotify destroy_notify)
|
|
{
|
|
FpDevicePrivate *priv = fp_device_get_instance_private (device);
|
|
FpDeviceTimeoutSource *source;
|
|
@@ -1497,7 +1499,7 @@ fpi_device_add_timeout (FpDevice *device,
|
|
source->user_data = user_data;
|
|
|
|
g_source_attach (&source->source, NULL);
|
|
- g_source_set_callback (&source->source, (GSourceFunc) func, user_data, NULL);
|
|
+ g_source_set_callback (&source->source, (GSourceFunc) func, user_data, destroy_notify);
|
|
g_source_set_ready_time (&source->source,
|
|
g_source_get_time (&source->source) + interval * (guint64) 1000);
|
|
priv->sources = g_slist_prepend (priv->sources, source);
|
|
diff --git a/libfprint/fpi-device.h b/libfprint/fpi-device.h
|
|
index d83a5a3..2333ae2 100644
|
|
--- a/libfprint/fpi-device.h
|
|
+++ b/libfprint/fpi-device.h
|
|
@@ -203,11 +203,11 @@ void fpi_device_get_delete_data (FpDevice *device,
|
|
GCancellable *fpi_device_get_cancellable (FpDevice *device);
|
|
|
|
|
|
-
|
|
-GSource * fpi_device_add_timeout (FpDevice *device,
|
|
- gint interval,
|
|
- FpTimeoutFunc func,
|
|
- gpointer user_data);
|
|
+GSource * fpi_device_add_timeout (FpDevice *device,
|
|
+ gint interval,
|
|
+ FpTimeoutFunc func,
|
|
+ gpointer user_data,
|
|
+ GDestroyNotify destroy_notify);
|
|
|
|
void fpi_device_set_nr_enroll_stages (FpDevice *device,
|
|
gint enroll_stages);
|
|
--
|
|
2.24.1
|
|
|