summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauro Moura <lauromoura@expertisesolutions.com.br>2016-04-25 18:02:05 -0300
committerFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2016-05-25 21:32:03 -0300
commit0eacdc03da738bebe03ac22fe377836751877345 (patch)
tree20644a04d1169d8393caff3bf33d0fac45830380
parent636c8b48c7da345eeb58b0eb0f436e0386e46e6f (diff)
downloadefl-0eacdc03da738bebe03ac22fe377836751877345.tar.gz
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.
-rw-r--r--src/lib/eio/eio_map.c6
-rw-r--r--src/tests/eio/eio_test_file.c47
2 files changed, 50 insertions, 3 deletions
diff --git a/src/lib/eio/eio_map.c b/src/lib/eio/eio_map.c
index 9f913e1d74..194b338516 100644
--- a/src/lib/eio/eio_map.c
+++ b/src/lib/eio/eio_map.c
@@ -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);
}
/**
diff --git a/src/tests/eio/eio_test_file.c b/src/tests/eio/eio_test_file.c
index 5513e9013a..d4c71cd11d 100644
--- a/src/tests/eio/eio_test_file.c
+++ b/src/tests/eio/eio_test_file.c
@@ -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);
}