diff options
author | Phil Sutter <phil@nwl.cc> | 2020-05-13 16:29:51 +0200 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2020-05-14 12:27:24 +0200 |
commit | c96c7da272e33a34770c4de4e3e50f7ed264672e (patch) | |
tree | c62aed869fa881e875ee58fd034bed6a57c6c5a4 /src/parser_json.c | |
parent | f3a61c8760d40cd2ac5822f5d724a97041cfdd63 (diff) |
JSON: Improve performance of json_events_cb()
The function tries to insert handles into JSON input for echo option.
Yet there may be nothing to do if the given netlink message doesn't
contain a handle, e.g. if it is an 'add element' command. Calling
seqnum_to_json() is pointless overhead in that case, and if input is
large this overhead is significant. Better wait with that call until
after checking if the message is relevant at all.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Acked-by: Eric Garver <eric@garver.life>
Diffstat (limited to 'src/parser_json.c')
-rw-r--r-- | src/parser_json.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/parser_json.c b/src/parser_json.c index 4468407b..3a84bd96 100644 --- a/src/parser_json.c +++ b/src/parser_json.c @@ -3847,12 +3847,15 @@ static uint64_t handle_from_nlmsg(const struct nlmsghdr *nlh) } int json_events_cb(const struct nlmsghdr *nlh, struct netlink_mon_handler *monh) { - json_t *tmp, *json = seqnum_to_json(nlh->nlmsg_seq); uint64_t handle = handle_from_nlmsg(nlh); + json_t *tmp, *json; void *iter; - /* might be anonymous set, ignore message */ - if (!json || !handle) + if (!handle) + return MNL_CB_OK; + + json = seqnum_to_json(nlh->nlmsg_seq); + if (!json) return MNL_CB_OK; tmp = json_object_get(json, "add"); |