On Tue, Jan 02, 2018 at 11:28:03PM +0900, Chris Mi wrote:
> @@ -240,23 +244,49 @@ static int batch(const char *name)
>       }
>  
>       cmdlineno = 0;
> -     while (getcmdline(&line, &len, stdin) != -1) {
> +     if (getcmdline(&line, &len, stdin) == -1)
> +             goto Exit;
> +     do {
>               char *largv[100];
>               int largc;
>  
> +             if (getcmdline(&line2, &len, stdin) == -1)
> +                     lastline = true;
> +
>               largc = makeargs(line, largv, 100);
>               if (largc == 0)
>                       continue;       /* blank line */

If it reads a new line, it won't process anything else after it
because line won't get updated.

  Marcelo

>  
> -             if (do_cmd(largc, largv)) {
> -                     fprintf(stderr, "Command failed %s:%d\n", name, 
> cmdlineno);
> +             line = line2;
> +             line2 = NULL;
> +             len = 0;
> +
> +             /*
> +              * In batch mode, if we haven't accumulated enough commands
> +              * and this is not the last command, don't send the message
> +              * immediately.
> +              */
> +             if (batch_size > 1 && msg_iov_index + 1 != batch_size
> +                 && !lastline)
> +                     send = false;
> +             else
> +                     send = true;
> +
> +             ret = do_cmd(largc, largv, batch_size, msg_iov_index++, send);
> +             if (ret < 0) {
> +                     fprintf(stderr, "Command failed %s:%d\n", name,
> +                             cmdlineno);
>                       ret = 1;
>                       if (!force)
>                               break;
>               }
> -     }
> -     if (line)
> -             free(line);
> +             msg_iov_index %= batch_size;
> +     } while (!lastline);
> +
> +     free_filter_reqs();
> +     free_action_reqs();
> +Exit:
> +     free(line);
>  
>       rtnl_close(&rth);
>       return ret;

Reply via email to