[ovs-dev] [PATCH] ovsdb: Fix timeout type for wait operation.
Numan Siddique
numans at ovn.org
Fri May 29 06:27:31 UTC 2020
On Thu, May 28, 2020 at 11:37 PM Han Zhou <hzhou at ovn.org> wrote:
> On Mon, May 25, 2020 at 10:07 AM Ilya Maximets <i.maximets at ovn.org> wrote:
> >
> > According to RFC 7047, 'timeout' is an integer field:
> >
> > 5.2.6. Wait
> > The "wait" object contains the following members:
> > "op": "wait" required
> > "timeout": <integer> optional
> > ...
> >
> > For some reason initial implementation treated it as a real number.
> >
> > This causes a build issue with clang that complains that LLONG_MAX
> > could not be represented as double:
> >
> > ovsdb/execution.c:733:32: error: implicit conversion from 'long long'
> > to 'double' changes value from
> > 9223372036854775807 to 9223372036854775808
> > timeout_msec = MIN(LLONG_MAX, json_real(timeout));
> > ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > /usr/include/sys/limits.h:69:19: note: expanded from macro 'LLONG_MAX'
> > #define LLONG_MAX __LLONG_MAX /* max for a long long */
> > ^~~~~~~~~~~
> > /usr/include/x86/_limits.h:74:21: note: expanded from macro
> '__LLONG_MAX'
> > #define __LLONG_MAX 0x7fffffffffffffffLL /* max value for a long
> long */
> > ^~~~~~~~~~~~~~~~~~~~
> > ./lib/util.h:90:21: note: expanded from macro 'MIN'
> > #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
> > ^ ~
> >
> > Fix that by changing parser to treat 'timeout' as integer.
> > Fixes clang build on FreeBSD 12.1 in CirrusCI.
> >
> > Fixes: f85f8ebbfac9 ("Initial implementation of OVSDB.")
> > Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
> > ---
> > ovsdb/execution.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/ovsdb/execution.c b/ovsdb/execution.c
> > index e45f3d679..3a0dad5d0 100644
> > --- a/ovsdb/execution.c
> > +++ b/ovsdb/execution.c
> > @@ -712,7 +712,7 @@ ovsdb_execute_wait(struct ovsdb_execution *x, struct
> ovsdb_parser *parser,
> > long long int timeout_msec = 0;
> > size_t i;
> >
> > - timeout = ovsdb_parser_member(parser, "timeout", OP_NUMBER |
> OP_OPTIONAL);
> > + timeout = ovsdb_parser_member(parser, "timeout", OP_INTEGER |
> OP_OPTIONAL);
> > where = ovsdb_parser_member(parser, "where", OP_ARRAY);
> > columns_json = ovsdb_parser_member(parser, "columns",
> > OP_ARRAY | OP_OPTIONAL);
> > @@ -730,7 +730,7 @@ ovsdb_execute_wait(struct ovsdb_execution *x, struct
> ovsdb_parser *parser,
> > }
> > if (!error) {
> > if (timeout) {
> > - timeout_msec = MIN(LLONG_MAX, json_real(timeout));
> > + timeout_msec = json_integer(timeout);
> > if (timeout_msec < 0) {
> > error = ovsdb_syntax_error(timeout, NULL,
> > "timeout must be
> nonnegative");
> > --
> > 2.25.4
> >
>
> This looks good to me. (I didn't test myself)
>
> Acked-by: Han Zhou <hzhou at ovn.org>
>
Applied the patch and tested it.
Acked-by: Numan Siddique <numans at ovn.org>
Thanks
Numan
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
More information about the dev
mailing list