linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] device: Defer write to storage
@ 2012-11-12 15:43 Frédéric Danis
  2012-11-13  8:11 ` Johan Hedberg
  0 siblings, 1 reply; 2+ messages in thread
From: Frédéric Danis @ 2012-11-12 15:43 UTC (permalink / raw)
  To: linux-bluetooth

Defere write to storage using g_idle_add() to avoid multiple
open/write/close operations when device properties are changed
in sequence.
---
 src/device.c |   24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/device.c b/src/device.c
index 9749bfd..354371b 100644
--- a/src/device.c
+++ b/src/device.c
@@ -196,6 +196,7 @@ struct btd_device {
 
 	GIOChannel      *att_io;
 	guint		cleanup_id;
+	guint		store_id;
 };
 
 static uint16_t uuid_list[] = {
@@ -205,8 +206,9 @@ static uint16_t uuid_list[] = {
 	0
 };
 
-static void store_device_info(struct btd_device *device)
+static gboolean store_device_info_cb(gpointer user_data)
 {
+	struct btd_device *device = user_data;
 	GKeyFile *key_file;
 	char filename[PATH_MAX + 1];
 	char adapter_addr[18];
@@ -214,8 +216,7 @@ static void store_device_info(struct btd_device *device)
 	char *str;
 	gsize length = 0;
 
-	if (device->temporary)
-		return;
+	device->store_id = 0;
 
 	key_file = g_key_file_new();
 
@@ -233,6 +234,16 @@ static void store_device_info(struct btd_device *device)
 	g_free(str);
 
 	g_key_file_free(key_file);
+
+	return FALSE;
+}
+
+static void store_device_info(struct btd_device *device)
+{
+	if (device->temporary || device->store_id)
+		return;
+
+	device->store_id = g_idle_add(store_device_info_cb, device);
 }
 
 static void browse_request_free(struct browse_req *req)
@@ -1839,6 +1850,13 @@ void device_remove(struct btd_device *device, gboolean remove_stored)
 	if (device->connected)
 		do_disconnect(device);
 
+	if (device->store_id) {
+		if (!remove_stored)
+			store_device_info_cb(device);
+
+		g_source_remove(device->store_id);
+	}
+
 	if (remove_stored)
 		device_remove_stored(device);
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] device: Defer write to storage
  2012-11-12 15:43 [PATCH] device: Defer write to storage Frédéric Danis
@ 2012-11-13  8:11 ` Johan Hedberg
  0 siblings, 0 replies; 2+ messages in thread
From: Johan Hedberg @ 2012-11-13  8:11 UTC (permalink / raw)
  To: Frédéric Danis; +Cc: linux-bluetooth

Hi Frederic,

On Mon, Nov 12, 2012, Frédéric Danis wrote:
> Defere write to storage using g_idle_add() to avoid multiple
> open/write/close operations when device properties are changed
> in sequence.
> ---
>  src/device.c |   24 +++++++++++++++++++++---
>  1 file changed, 21 insertions(+), 3 deletions(-)

Applied after a couple of cosmetic fixes (we try to use > 0 for testing
for valid GSource IDs). Thanks.

Johan

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-11-13  8:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-12 15:43 [PATCH] device: Defer write to storage Frédéric Danis
2012-11-13  8:11 ` Johan Hedberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).