Hi, On Tue, Mar 8, 2016 at 4:08 PM, Luiz Augusto von Dentz <luiz.dentz@xxxxxxxxx> wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> > > This makes sure that all request callback are called with > BT_ATT_OP_ERROR_RSP in case the link is dropped so they can propagate > the error back to the caller. > --- > src/shared/att.c | 21 ++++++++++++++++++++- > 1 file changed, 20 insertions(+), 1 deletion(-) > > diff --git a/src/shared/att.c b/src/shared/att.c > index 7b20757..a29c100 100644 > --- a/src/shared/att.c > +++ b/src/shared/att.c > @@ -535,6 +535,16 @@ static void disconn_handler(void *data, void *user_data) > disconn->callback(err, disconn->user_data); > } > > +static void disc_att_send_op(void *data) > +{ > + struct att_send_op *op = data; > + > + if (op->callback) > + op->callback(BT_ATT_OP_ERROR_RSP, NULL, 0, op->user_data); > + > + destroy_att_send_op(op); > +} > + > static bool disconnect_cb(struct io *io, void *user_data) > { > struct bt_att *att = user_data; > @@ -557,7 +567,16 @@ static bool disconnect_cb(struct io *io, void *user_data) > io_destroy(att->io); > att->io = NULL; > > - bt_att_cancel_all(att); > + /* Notify request callbacks */ > + queue_remove_all(att->req_queue, NULL, NULL, disc_att_send_op); > + queue_remove_all(att->ind_queue, NULL, NULL, disc_att_send_op); > + queue_remove_all(att->write_queue, NULL, NULL, disc_att_send_op); > + > + if (att->pending_req) > + disc_att_send_op(att->pending_req); > + > + if (att->pending_ind) > + disc_att_send_op(att->pending_ind); > > bt_att_ref(att); > > -- > 2.5.0 Applied. -- 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