On Thu, Apr 03, 2014 at 03:56:44PM -0700, Chris Hydon wrote: > On 2014-04-03 3:34 PM, Ben Pfaff wrote: > >On Thu, Apr 03, 2014 at 03:06:03PM -0700, Chris Hydon wrote: > >>Previously, if the final iteration of the loop in jsonrpc_recv reads or > >>parses the last portion of a json object, it will return EAGAIN, with > >>the next call to jsonrpc_recv setting the message pointer. This can be > >>problematic if external code uses this function in conjunction with a > >>check on the socket's file descripitor. With this change, the loop does > >>not end if the byte queue is non-empty unless the parser has completed, > >>in which case the message pointer will always be set to the parsed > >>message. > >> > >>Signed-off-by: Chris Hydon<chy...@aristanetworks.com> > >I see the problem but I think that overall the code is just > >unnecessarily complicated here. I sent out an alternative patch that > >makes it simpler and should fix the same problem. Will you review it? > >It is posted here: > > http://openvswitch.org/pipermail/dev/2014-April/038437.html > >Thanks. > > It looks like your change also fixes the problem, and I don't see > any bugs. I agree entirely: the current code is needlessly complex! > My only comment is that with your change, for long messages up to > twice as much is read from the socket as before. If 50 was a > strategically chosen value, the number of loops maybe ought to be > reduced to 25, otherwise this is not an issue.
The previous value was arbitrary. I chose it to be big enough to get a significant amount of work done in one call, but not so big that a single connection could soak up all the CPU and prevent other work from getting done. I'll push this to master in a little while. Is this causing trouble for you on any particular branch? I'm willing to backport it to older versions, since that should be trivial. Thanks, Ben. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev