Hi Mikel, On Fri, May 25, 2012 at 1:11 PM, Mikel Astiz <mikel.astiz.oss@xxxxxxxxx> wrote: > +static void transfer_notify_progress(struct obc_transfer *transfer) > +{ > + gint64 now; > + gint64 notify; > + > + DBG("Transfer %p progress: %lu bytes", transfer, transfer->transferred); > + > + if (transfer->path == NULL) > + return; > + > + if (transfer->transferred == transfer->transferred_dbus) > + return; > + > + now = g_get_monotonic_time(); > + notify = transfer->transferred_dbus_time + > + TRANSFER_PROGRESS_PERIOD * 1000; > + > + if ((transfer->transferred != transfer->size) && (now < notify)) > + return; > + > + transfer->transferred_dbus = transfer->transferred; > + transfer->transferred_dbus_time = now; > + > + obex_dbus_signal_property_changed(transfer->conn, > + transfer->path, > + TRANSFER_INTERFACE, "Progress", > + DBUS_TYPE_INT64, > + &transfer->transferred_dbus); > +} I would suggest doing it in a different manner using g_timeout_add_seconds and storing the id, so you just need to know if the timer is running by checking the id, if there is no timer running you start it, if there is you just update the bytes transferred and wait the timeout to be fired where you emit the signal. If in the meantime the transfer is completed you just have to cleanup using g_source_remove, this should be simpler because you don't have to bother how much time has passed on every packet. -- Luiz Augusto von Dentz -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html