From: Ben Pfaff Date: Wed, 19 May 2010 21:13:23 +0000 (-0700) Subject: netlink: Make nl_sock_transact() discard reply if 'replyp' is null. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e2093fc182d6e418b998a55e3a9080d7f97cd0a;p=openvswitch netlink: Make nl_sock_transact() discard reply if 'replyp' is null. Sometimes only the success or failure return value is interesting, not the details of the reply, so this simplifies some callers. --- diff --git a/lib/netlink.c b/lib/netlink.c index 91e5ccd8..5f26feb4 100644 --- a/lib/netlink.c +++ b/lib/netlink.c @@ -341,9 +341,12 @@ try_again: } /* Sends 'request' to the kernel via 'sock' and waits for a response. If - * successful, stores the reply into '*replyp' and returns 0. The caller is - * responsible for destroying the reply with ofpbuf_delete(). On failure, - * returns a positive errno value and stores a null pointer into '*replyp'. + * successful, returns 0. On failure, returns a positive errno value. + * + * If 'replyp' is nonnull, then on success '*replyp' is set to the kernel's + * reply, which the caller is responsible for freeing with ofpbuf_delete(), and + * on failure '*replyp' is set to NULL. If 'replyp' is null, then the kernel's + * reply, if any, is discarded. * * nlmsg_len in 'msg' will be finalized to match msg->size, and nlmsg_pid will * be set to 'sock''s pid, before the message is sent. NLM_F_ACK will be set @@ -386,7 +389,9 @@ nl_sock_transact(struct nl_sock *sock, struct ofpbuf *reply; int retval; - *replyp = NULL; + if (replyp) { + *replyp = NULL; + } /* Ensure that we get a reply even if this message doesn't ordinarily call * for one. */ @@ -425,7 +430,11 @@ recv: return retval != EAGAIN ? retval : EPROTO; } - *replyp = reply; + if (replyp) { + *replyp = reply; + } else { + ofpbuf_delete(reply); + } return 0; } diff --git a/vswitchd/proc-net-compat.c b/vswitchd/proc-net-compat.c index 72eb7be3..106a7c3f 100644 --- a/vswitchd/proc-net-compat.c +++ b/vswitchd/proc-net-compat.c @@ -72,7 +72,7 @@ proc_net_compat_init(void) static int set_proc_file(const char *dir, const char *file, const char *data) { - struct ofpbuf request, *reply; + struct ofpbuf request; int retval; ofpbuf_init(&request, 0); @@ -84,9 +84,8 @@ set_proc_file(const char *dir, const char *file, const char *data) nl_msg_put_string(&request, BRC_GENL_A_PROC_DATA, data); } - retval = nl_sock_transact(brc_sock, &request, &reply); + retval = nl_sock_transact(brc_sock, &request, NULL); ofpbuf_uninit(&request); - ofpbuf_delete(reply); if (retval) { VLOG_WARN_RL(&rl, "failed to %s /proc/%s/%s (%s)", data ? "update" : "remove", dir, file, strerror(retval));