Re: [patch iproute2 v4 2/3] tc: Add -bs option to batch mode
flat view
From: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Date: 2018-01-02 20:04:29
On Tue, Jan 02, 2018 at 11:28:03PM +0900, Chris Mi wrote:
quoted hunk ↗ jump to hunk
@@ -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
quoted hunk ↗ jump to hunk
- 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;