auto_comp: free the all used memory.
clean logic of lexem_nodes was a little aweful even it missed chunks of memory. free all of them perfectly.
This commit is contained in:
parent
c6cff4bef8
commit
626c184817
|
@ -28,7 +28,7 @@ typedef struct autocomp_s
|
||||||
{
|
{
|
||||||
char queue[QUEUE_SIZE];
|
char queue[QUEUE_SIZE];
|
||||||
int queue_pos;
|
int queue_pos;
|
||||||
const lexem *lexem_root;
|
lexem *lexem_root;
|
||||||
lexem *lexem_ptr;
|
lexem *lexem_ptr;
|
||||||
Eet_File *source_file;
|
Eet_File *source_file;
|
||||||
edit_data *ed;
|
edit_data *ed;
|
||||||
|
@ -98,7 +98,7 @@ autocomp_load(autocomp_data *ad)
|
||||||
ad->source_file = eet_open(buf, EET_FILE_MODE_READ);
|
ad->source_file = eet_open(buf, EET_FILE_MODE_READ);
|
||||||
|
|
||||||
ad->lexem_root = (lexem *)eet_data_read(ad->source_file, lex_desc, "node");
|
ad->lexem_root = (lexem *)eet_data_read(ad->source_file, lex_desc, "node");
|
||||||
ad->lexem_ptr = (lexem *)ad->lexem_root;
|
ad->lexem_ptr = ad->lexem_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -110,25 +110,17 @@ init_thread_cb(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
lexem_tree_free(lexem **root)
|
lexem_tree_free(lexem *node)
|
||||||
{
|
{
|
||||||
lexem *data = NULL;
|
if (!node) return;
|
||||||
Eina_List *l = NULL;
|
|
||||||
|
|
||||||
if (!(*root)) return;
|
lexem *child;
|
||||||
|
EINA_LIST_FREE(node->nodes, child)
|
||||||
|
lexem_tree_free(child);
|
||||||
|
|
||||||
EINA_LIST_FOREACH((*root)->nodes, l, data)
|
free(node->txt);
|
||||||
{
|
free(node->name);
|
||||||
if (data->nodes)
|
free(node);
|
||||||
lexem_tree_free(&data);
|
|
||||||
}
|
|
||||||
|
|
||||||
EINA_LIST_FREE((*root)->nodes, data)
|
|
||||||
{
|
|
||||||
free(data->txt);
|
|
||||||
free(data->name);
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -144,7 +136,7 @@ context_lexem_thread_cb(void *data, Ecore_Thread *thread)
|
||||||
|
|
||||||
Eina_List *l = NULL;
|
Eina_List *l = NULL;
|
||||||
Eina_List *nodes = td->ad->lexem_root->nodes;
|
Eina_List *nodes = td->ad->lexem_root->nodes;
|
||||||
td->result = (lexem *)td->ad->lexem_root;
|
td->result = td->ad->lexem_root;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int k = 0;
|
int k = 0;
|
||||||
int depth = 0;
|
int depth = 0;
|
||||||
|
@ -355,7 +347,7 @@ context_lexem_get(autocomp_data *ad, Evas_Object *entry, Eina_Bool list_show)
|
||||||
const char *text = elm_entry_entry_get(entry);
|
const char *text = elm_entry_entry_get(entry);
|
||||||
if (!text)
|
if (!text)
|
||||||
{
|
{
|
||||||
ad->lexem_ptr = (lexem *)ad->lexem_root;
|
ad->lexem_ptr = ad->lexem_root;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,7 +380,7 @@ context_changed(autocomp_data *ad, Evas_Object *edit)
|
||||||
|
|
||||||
if (!cursor_position)
|
if (!cursor_position)
|
||||||
{
|
{
|
||||||
ad->lexem_ptr = (lexem *)ad->lexem_root;
|
ad->lexem_ptr = ad->lexem_root;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1010,7 +1002,7 @@ autocomp_term(void)
|
||||||
evas_object_del(ad->event_rect);
|
evas_object_del(ad->event_rect);
|
||||||
evas_object_del(ad->anchor);
|
evas_object_del(ad->anchor);
|
||||||
|
|
||||||
lexem_tree_free((lexem **)&ad->lexem_root);
|
lexem_tree_free(ad->lexem_root);
|
||||||
|
|
||||||
eet_data_descriptor_free(lex_desc);
|
eet_data_descriptor_free(lex_desc);
|
||||||
eet_close(ad->source_file);
|
eet_close(ad->source_file);
|
||||||
|
|
Loading…
Reference in New Issue