eio: Call correct function to cleanup Eio_File.

The Eio functions operating on Eina_Files were just freeing
the Eio_File pointer on completion instead of calling eio_file_free
to unregister the thread.
This commit is contained in:
Lauro Moura 2016-04-25 18:02:05 -03:00 committed by Felipe Magno de Almeida
parent 636c8b48c7
commit 0eacdc03da
2 changed files with 50 additions and 3 deletions

View File

@ -44,7 +44,7 @@ static void
_eio_file_open_free(Eio_File_Map *map)
{
if (map->name) eina_stringshare_del(map->name);
free(map);
eio_file_free((Eio_File*)map);
}
static void
@ -144,7 +144,7 @@ _eio_file_map_end(void *data, Ecore_Thread *thread EINA_UNUSED)
Eio_File_Map_Rule *map = data;
map->map_cb((void*) map->common.data, &map->common, map->result, map->length);
free(map);
eio_file_free((Eio_File*)map);
}
static void
@ -153,7 +153,7 @@ _eio_file_map_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
Eio_File_Map_Rule *map = data;
eio_file_error(&map->common);
free(map);
eio_file_free((Eio_File*)map);
}
/**

View File

@ -118,6 +118,15 @@ _error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, int error)
ecore_main_loop_quit();
}
static void
_open_done_cb(void *data, Eio_File *handler EINA_UNUSED, Eina_File *file)
{
Eina_Bool *opened = (Eina_Bool *)data;
*opened = EINA_TRUE;
eina_file_close(file);
ecore_main_loop_quit();
}
Eina_Tmpstr*
get_full_path(const char* tmpdirname, const char* filename)
{
@ -368,9 +377,47 @@ START_TEST(eio_file_test_file)
}
END_TEST
START_TEST(eio_file_test_open)
{
Eina_Bool opened_file;
int ret;
ret = ecore_init();
fail_if(ret < 1);
ret = eio_init();
fail_if(ret < 1);
ret = eina_init();
fail_if(ret < 1);
ret = ecore_file_init();
fail_if(ret < 1);
Eina_Tmpstr *test_dirname = get_eio_test_file_tmp_dir();
Eina_Tmpstr *nested_dirname = create_test_dirs(test_dirname);
Eina_Tmpstr *nested_filename = get_full_path(test_dirname, files[3]);
opened_file = EINA_FALSE;
eio_file_open(nested_filename, EINA_FALSE, _open_done_cb, _error_cb, &opened_file);
ecore_main_loop_begin();
fail_if(!opened_file);
// Cleanup
fail_if(!ecore_file_recursive_rm(test_dirname));
eina_tmpstr_del(nested_dirname);
eina_tmpstr_del(test_dirname);
eina_tmpstr_del(nested_filename);
ecore_file_shutdown();
eina_shutdown();
eio_shutdown();
ecore_shutdown();
}
END_TEST
void
eio_test_file(TCase *tc)
{
tcase_add_test(tc, eio_file_test_ls);
tcase_add_test(tc, eio_file_test_file);
tcase_add_test(tc, eio_file_test_open);
}