Skip to content

Commit 4bb347c

Browse files
authored
Merge pull request #248 from EricccTaiwan/fix-record_error
Fix console hang after exceeding input limit
2 parents a2b0d76 + 9991969 commit 4bb347c

File tree

1 file changed

+34
-26
lines changed

1 file changed

+34
-26
lines changed

console.c

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,43 @@ static char **parse_args(char *line, int *argcp)
160160
return argv;
161161
}
162162

163+
/* Handles forced console termination for record_error and do_quit */
164+
static bool force_quit(int argc, char *argv[])
165+
{
166+
cmd_element_t *c = cmd_list;
167+
bool ok = true;
168+
while (c) {
169+
cmd_element_t *ele = c;
170+
c = c->next;
171+
free_block(ele, sizeof(cmd_element_t));
172+
}
173+
174+
param_element_t *p = param_list;
175+
while (p) {
176+
param_element_t *ele = p;
177+
p = p->next;
178+
free_block(ele, sizeof(param_element_t));
179+
}
180+
181+
while (buf_stack)
182+
pop_file();
183+
184+
for (int i = 0; i < quit_helper_cnt; i++) {
185+
ok = ok && quit_helpers[i](argc, argv);
186+
}
187+
188+
quit_flag = true;
189+
return ok;
190+
}
191+
163192
static void record_error()
164193
{
165194
err_cnt++;
166195
if (err_cnt >= err_limit) {
167-
report(1, "Error limit exceeded. Stopping command execution");
168-
quit_flag = true;
196+
report(
197+
1,
198+
"Error limit exceeded. Stopping command execution, and quitting");
199+
force_quit(0, NULL);
169200
}
170201
}
171202

@@ -226,30 +257,7 @@ void set_echo(bool on)
226257
/* Built-in commands */
227258
static bool do_quit(int argc, char *argv[])
228259
{
229-
cmd_element_t *c = cmd_list;
230-
bool ok = true;
231-
while (c) {
232-
cmd_element_t *ele = c;
233-
c = c->next;
234-
free_block(ele, sizeof(cmd_element_t));
235-
}
236-
237-
param_element_t *p = param_list;
238-
while (p) {
239-
param_element_t *ele = p;
240-
p = p->next;
241-
free_block(ele, sizeof(param_element_t));
242-
}
243-
244-
while (buf_stack)
245-
pop_file();
246-
247-
for (int i = 0; i < quit_helper_cnt; i++) {
248-
ok = ok && quit_helpers[i](argc, argv);
249-
}
250-
251-
quit_flag = true;
252-
return ok;
260+
return force_quit(argc, argv);
253261
}
254262

255263
static bool do_help(int argc, char *argv[])

0 commit comments

Comments
 (0)