From: Bharat Bhusan Panda <bharat.panda@samsung.com>
To: 'Johan Hedberg' <johan.hedberg@gmail.com>
Cc: linux-bluetooth@vger.kernel.org, cpgs@samsung.com
Subject: RE: [PATCH ] GATT: Fixed PTS issues for multiple write request
Date: Thu, 21 Aug 2014 18:08:28 +0530 [thread overview]
Message-ID: <011c01cfbd3c$dab69540$9023bfc0$@samsung.com> (raw)
In-Reply-To: <20140818064848.GA7214@t440s.P-661HNU-F1>
Hi Johan,
> On Mon, Aug 18, 2014, Bharat Panda wrote:
> > Updates gatt attribute db using offset value. This fixes below PTS
> > TCs.
> >
> > TP/GAW/SR/BV-06-C
> > TP/GAW/SR/BV-10-C
> > TP/GAW/SR/BI-14-C
> > TP/GAW/SR/BI-15-C
> > TP/GAW/SR/BV-05-C
> > TP/GAW/SR/BI-07-C
> > TP/GAW/SR/BI-08-C
> > TP/GAW/SR/BI-34-C
> > TP/GAW/SR/BI-25-C
> > TP/GAW/SR/BI-26-C
> > ---
> > plugins/gatt-example.c | 2 +-
> > profiles/alert/server.c | 16 ++++++-------
> > profiles/proximity/linkloss.c | 2 +-
> > profiles/time/server.c | 6 ++---
> > src/attrib-server.c | 53 +++++++++++++++++++++++++++++++++++-
> -------
> > src/attrib-server.h | 2 +-
> > 6 files changed, 57 insertions(+), 24 deletions(-)
>
> Your commit message should have a bit more content, i.e. give some more
> background to the issue and justify & explain the way that you're solving
it.
> Also, the subject seems misleading to me as this is related to long writes
and
> not "multiple write".
I have added descriptive content for the same patch in my following patch
that I submitted.
>
> > - case ATT_OP_READ_MULTI_REQ:
> > case ATT_OP_PREP_WRITE_REQ:
> > + length = dec_prep_write_req(ipdu, len, &start, &offset,
> value, &vlen);
> > + if (length == 0) {
> > + status = ATT_ECODE_INVALID_PDU;
> > + goto done;
> > + }
> > +
> > + length = write_value(channel, start, value, vlen, opdu,
> > +
> channel->mtu, offset);
> > + break;
> > +
> > case ATT_OP_EXEC_WRITE_REQ:
> > + break;
> > + case ATT_OP_READ_MULTI_REQ:
> > default:
> > DBG("Unsupported request 0x%02x", ipdu[0]);
> > status = ATT_ECODE_REQ_NOT_SUPP;
>
> This doesn't look right. The changes should not be taking effect until
execute
> write has been issued. Here it seems the write_value() makes an
irreversible
> change to the database.
Fixed this issue in the following patch.
>
> > - a->data = g_try_realloc(a->data, len);
> > + if (offset) {
> > + uint8_t *temp;
> > + temp = malloc(sizeof(uint8_t) * a->len);
> > + if (temp == NULL) {
> > + DBG("Unable to allocate memory");
> > + return -ENOMEM;
> > + }
> > + memcpy(temp, a->data, a->len);
> > + a->data = g_try_realloc(a->data, (a->len + (a->len - offset)
+
> > +len));
>
> This calculation doesn't look right. Shouldn't the new size be simply
offset +
> len? Or if offset + len is less than the original length and the
specification
> requires to preserve the data after it (which I'm not sure it does) then
you'd
> need some extra condition here. You'd also not need realloc in this case
since
> the buffer wouldn't grow.
Fixed and added proper length to cache the write data.
>
> > + memcpy(a->data, temp, a->len);
>
> First of all the "try" versions of GLib allocation functions may return
NULL so
> you can't just copy to a->data without checking first. However, most of
this
> code is completely unnecessary: realloc maintains the the contents of the
> memory so there's no need of a temporary buffer here.
>
> > + free(temp);
> > + }
> > + else {
> > + a->data = g_try_realloc(a->data, len);
> > + }
>
> The coding style is:
>
> if (...) {
> ...
> ...
> } else {
> ...
> ...
> }
>
> > + if (offset) {
> > + a->len = a->len + (a->len - offset) + len;
>
> Shouldn't this be a->len = offset + len?
There were lots of case handling for calculating the proper length value,
added in following patch.
>
> > + memcpy((a->data + offset), value, len);
> > + }
> > + else {
> > + a->len = len;
> > + memcpy(a->data, value, len);
> > + }
>
> Same thing as earlier with the if-else coding style.
>
A new patch has been submitted, with above review comments incorporated,
also added multiple write request support as well as long write fix.
Regards,
Bharat
prev parent reply other threads:[~2014-08-21 12:38 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-18 6:11 [PATCH ] GATT: Fixed PTS issues for multiple write request Bharat Panda
2014-08-18 6:48 ` Johan Hedberg
2014-08-21 12:38 ` Bharat Bhusan Panda [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='011c01cfbd3c$dab69540$9023bfc0$@samsung.com' \
--to=bharat.panda@samsung.com \
--cc=cpgs@samsung.com \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.