rconn: Make queued packet counting harder to screw up.
authorBen Pfaff <blp@nicira.com>
Tue, 3 Mar 2009 22:24:12 +0000 (14:24 -0800)
committerBen Pfaff <blp@nicira.com>
Tue, 3 Mar 2009 22:24:12 +0000 (14:24 -0800)
commitef2e0f4c39ea4d1caf420c1cc617439e97fe76dc
treeb2a38cd350294a45d4b1b15f5a33a7077816f9d8
parent7db28df6b4395e8f33d57d2d427ee9d94eede88f
rconn: Make queued packet counting harder to screw up.

The semantics of the 'n_queued' parameter to rconn_send() and
rconn_send_with_limit() were too easy to screw up: if the memory area in
which the passed-in data lived was destroyed before the rconn was
destroyed, then rconn_destroy() (or simply flushing out the transmission
queue) would access invalid memory or, worse, decrement a random integer
in reused memory.  It was possible to avoid this by destroying the rconn
before destroying the queue count data area, but this is difficult to
remember and not always possible in the general case.

This commit changes to using a reference-counted structure, which is harder
to get wrong.
lib/learning-switch.c
lib/rconn.c
lib/rconn.h
vswitchd/bridge.c
vswitchd/stats.c