mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-25 10:28:56 +02:00
gfile: make_directory_with_parents race condition
A race condition could cause g_file_make_directory_with_parents() to fail with G_IO_ERROR_EXISTS despite the requested directory not existing. https://bugzilla.gnome.org/show_bug.cgi?id=719455
This commit is contained in:
committed by
Ryan Lortie
parent
388e0d576f
commit
5a7db3015a
@@ -3777,6 +3777,11 @@ g_file_make_directory_with_parents (GFile *file,
|
|||||||
|
|
||||||
g_clear_error (&my_error);
|
g_clear_error (&my_error);
|
||||||
g_file_make_directory (parent_file, cancellable, &my_error);
|
g_file_make_directory (parent_file, cancellable, &my_error);
|
||||||
|
/* Another process may have created the directory in between the
|
||||||
|
* G_IO_ERROR_NOT_FOUND and now
|
||||||
|
*/
|
||||||
|
if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_EXISTS))
|
||||||
|
g_clear_error (&my_error);
|
||||||
|
|
||||||
g_object_unref (work_file);
|
g_object_unref (work_file);
|
||||||
work_file = g_object_ref (parent_file);
|
work_file = g_object_ref (parent_file);
|
||||||
@@ -3790,6 +3795,8 @@ g_file_make_directory_with_parents (GFile *file,
|
|||||||
for (l = list; my_error == NULL && l; l = l->next)
|
for (l = list; my_error == NULL && l; l = l->next)
|
||||||
{
|
{
|
||||||
g_file_make_directory ((GFile *) l->data, cancellable, &my_error);
|
g_file_make_directory ((GFile *) l->data, cancellable, &my_error);
|
||||||
|
if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_EXISTS))
|
||||||
|
g_clear_error (&my_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (work_file)
|
if (work_file)
|
||||||
|
Reference in New Issue
Block a user