Skip to content
Snippets Groups Projects
Commit 5757f47f authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

Make unit tests work when tests get run in subprocesses.

Apparently the way we handled cleaning up temporary directories with
atexit() meant that when the child process exited, it would remove the
temporary directory, thus making other tests in the main process fail.
parent 8394c702
No related branches found
No related tags found
No related merge requests found
......@@ -70,6 +70,7 @@ int have_failed = 0;
/** Temporary directory (set up by setup_directory) under which we store all
* our files during testing. */
static char temp_dir[256];
static pid_t temp_dir_setup_in_pid = 0;
/** Select and create the temporary directory we'll use to run our unit tests.
* Store it in <b>temp_dir</b>. Exit immediately if we can't create it.
......@@ -96,6 +97,7 @@ setup_directory(void)
exit(1);
}
is_setup = 1;
temp_dir_setup_in_pid = getpid();
}
/** Return a filename relative to our testing temporary directory */
......@@ -109,11 +111,16 @@ get_fname(const char *name)
}
/** Remove all files stored under the temporary directory, and the directory
* itself. */
* itself. Called by atexit(). */
static void
remove_directory(void)
{
smartlist_t *elements = tor_listdir(temp_dir);
smartlist_t *elements;
if (getpid() != temp_dir_setup_in_pid) {
/* Only clean out the tempdir when the main process is exiting. */
return;
}
elements = tor_listdir(temp_dir);
if (elements) {
SMARTLIST_FOREACH(elements, const char *, cp,
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment