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;