Applied, thx very much for the review.

On Mon, Apr 21, 2014 at 9:10 PM, Ethan Jackson <et...@nicira.com> wrote:

> LGTM as well
>
> On Mon, Apr 21, 2014 at 9:09 PM, Alex Wang <al...@nicira.com> wrote:
> > Commit 1f8675481e (ofproto-dpif-upcall: Fix ovs-vswitchd crash.)
> > directly copied the udpif_set_threads() logic to udpif_stop_threads()
> > and udpif_start_threads().  In fact, this was erroneous and caused
> > unittest failures.
> >
> > This commit fixes the above issue by correcting the checks in
> > udpif_stop_threads() and udpif_start_threads(), and adding necessary
> > checks in udpif_set_threads().
> >
> > Acked-by: Ethan Jackson <et...@nicira.com>
> > Signed-off-by: Alex Wang <al...@nicira.com>
> >
> > ---
> > PATCH -> V2:
> > - refine the checks.
> > ---
> >  ofproto/ofproto-dpif-upcall.c |   16 ++++++++++------
> >  1 file changed, 10 insertions(+), 6 deletions(-)
> >
> > diff --git a/ofproto/ofproto-dpif-upcall.c
> b/ofproto/ofproto-dpif-upcall.c
> > index 8e43e84..416cfdc 100644
> > --- a/ofproto/ofproto-dpif-upcall.c
> > +++ b/ofproto/ofproto-dpif-upcall.c
> > @@ -296,9 +296,7 @@ udpif_destroy(struct udpif *udpif)
> >  static void
> >  udpif_stop_threads(struct udpif *udpif)
> >  {
> > -    if (udpif->handlers &&
> > -        (udpif->n_handlers != n_handlers
> > -         || udpif->n_revalidators != n_revalidators)) {
> > +    if (udpif && (udpif->n_handlers != 0 || udpif->n_revalidators !=
> 0)) {
> >          size_t i;
> >
> >          latch_set(&udpif->exit_latch);
> > @@ -360,7 +358,7 @@ static void
> >  udpif_start_threads(struct udpif *udpif, size_t n_handlers,
> >                      size_t n_revalidators)
> >  {
> > -    if (!udpif->handlers && n_handlers) {
> > +    if (udpif && (!udpif->handlers && !udpif->revalidators)) {
> >          size_t i;
> >
> >          udpif->n_handlers = n_handlers;
> > @@ -403,10 +401,14 @@ udpif_set_threads(struct udpif *udpif, size_t
> n_handlers,
> >  {
> >      int error;
> >
> > +    ovs_assert(udpif);
> >      ovs_assert(n_handlers && n_revalidators);
> >
> >      ovsrcu_quiesce_start();
> > -    udpif_stop_threads(udpif);
> > +    if (udpif->n_handlers != n_handlers
> > +        || udpif->n_revalidators != n_revalidators) {
> > +        udpif_stop_threads(udpif);
> > +    }
> >
> >      error = dpif_handlers_set(udpif->dpif, n_handlers);
> >      if (error) {
> > @@ -415,7 +417,9 @@ udpif_set_threads(struct udpif *udpif, size_t
> n_handlers,
> >          return;
> >      }
> >
> > -    udpif_start_threads(udpif, n_handlers, n_revalidators);
> > +    if (!udpif->handlers && !udpif->revalidators) {
> > +        udpif_start_threads(udpif, n_handlers, n_revalidators);
> > +    }
> >      ovsrcu_quiesce_end();
> >  }
> >
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to