diff options
author | Ben Pfaff <blp@nicira.com> | 2013-05-01 11:05:28 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2013-06-06 16:54:46 -0700 |
commit | 3aa30359b1cce9b597f7c4284a80ed05619e57c1 (patch) | |
tree | 8da04a7ea6d410ca0d2c856f46c2fc83d48f36d7 /lib/dpif-netdev.c | |
parent | 3efb60637b9a6741e7e5b7f04e4daa4d2464d8b3 (diff) |
netdev-vport: Don't return static data in netdev_vport_get_dpif_port().
Returning a static data buffer makes code more brittle and definitely
not thread-safe, so this commit switches to using a caller-provided
buffer instead.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/dpif-netdev.c')
-rw-r--r-- | lib/dpif-netdev.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 30a1832e..52aedb69 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -440,8 +440,11 @@ dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev, uint32_t *port_nop) { struct dp_netdev *dp = get_dp_netdev(dpif); + char namebuf[NETDEV_VPORT_NAME_BUFSIZE]; + const char *dpif_port; int port_no; + dpif_port = netdev_vport_get_dpif_port(netdev, namebuf, sizeof namebuf); if (*port_nop != UINT32_MAX) { if (*port_nop >= MAX_PORTS) { return EFBIG; @@ -450,12 +453,11 @@ dpif_netdev_port_add(struct dpif *dpif, struct netdev *netdev, } port_no = *port_nop; } else { - port_no = choose_port(dp, netdev_vport_get_dpif_port(netdev)); + port_no = choose_port(dp, dpif_port); } if (port_no >= 0) { *port_nop = port_no; - return do_add_port(dp, netdev_vport_get_dpif_port(netdev), - netdev_get_type(netdev), port_no); + return do_add_port(dp, dpif_port, netdev_get_type(netdev), port_no); } return EFBIG; } @@ -1079,6 +1081,7 @@ dpif_netdev_run(struct dpif *dpif) dp_netdev_port_input(dp, port, &packet, 0, 0, NULL); } else if (error != EAGAIN && error != EOPNOTSUPP) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); + VLOG_ERR_RL(&rl, "error receiving data from %s: %s", netdev_get_name(port->netdev), strerror(error)); } |