[RTEMS Project] #4564: close_editor problem of RTEMS4.13/5.1
RTEMS trac
trac at rtems.org
Sun Dec 5 14:03:15 UTC 2021
#4564: close_editor problem of RTEMS4.13/5.1
----------------------------+--------------------
Reporter: chenjin_zhong | Owner: (none)
Type: defect | Status: new
Priority: normal | Milestone: 5.1
Component: shell | Version: 5
Severity: normal | Keywords:
Blocked By: | Blocking:
----------------------------+--------------------
Hi, I find when close editor in shell console.some errors will occur. I
check and analyse the source code of medit.c. the code fragment is listed
as follows.
#if defined(__rtems__)
case ctrl('w'): ed = ed->env->current; close_editor(ed); break;
#else
case ctrl('w'): close_editor(ed); ed = ed->env->current; break;
#endif
static void close_editor(struct editor *ed) {
struct env *env = ed->env;
if (ed->dirty) {
display_message(ed, "Close %s without saving changes (y/n)? ",
ed->filename);
if (!ask()) {
ed->refresh = 1;
return;
}
}
delete_editor(ed);
ed = env->current;
if (!ed) {
ed = create_editor(env);
new_file(ed, "");
}
ed->refresh = 1;
}
static void delete_editor(struct editor *ed) {
if (ed->next == ed) {
ed->env->current = NULL;
} else {
ed->env->current = ed->prev;
}
ed->next->prev = ed->prev;
ed->prev->next = ed->next;
if (ed->start) free(ed->start);
clear_undo(ed);
** free(ed);**
}
as seen above, if the macro **__rtems__** is defined. the delete_editor
function will free **ed** pointer. Therefore, after the next loop, the
**ed** is an invalid pointer.I have checked the code of
https://github.com/ringgaard/sanos/blob/master/src/utils/edit/edit.c. the
code is as follows.
**case ctrl('w'): close_editor(ed); ed = ed->env->current; break;**
--
Ticket URL: <http://devel.rtems.org/ticket/4564>
RTEMS Project <http://www.rtems.org/>
RTEMS Project
More information about the bugs
mailing list