mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 15:56:23 +01:00
only query file info in g_file_copy() when we need it
The default implementation of g_file_copy() checked the size of the file to copy to give useful progress updates unconditionally. This can cause long delays on 1-connection FTP servers while it tries to open a second connection before it returns EBUSY. This patch makes this query only happen when we actually send progress updates.
This commit is contained in:
parent
0bb5739f32
commit
29a4a0a44d
34
gio/gfile.c
34
gio/gfile.c
@ -2644,28 +2644,32 @@ copy_stream_with_progress (GInputStream *in,
|
||||
GFileInfo *info;
|
||||
|
||||
total_size = -1;
|
||||
info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (in),
|
||||
G_FILE_ATTRIBUTE_STANDARD_SIZE,
|
||||
cancellable, NULL);
|
||||
if (info)
|
||||
/* avoid performance impact of querying total size when it's not needed */
|
||||
if (progress_callback)
|
||||
{
|
||||
if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
|
||||
total_size = g_file_info_get_size (info);
|
||||
g_object_unref (info);
|
||||
}
|
||||
|
||||
if (total_size == -1)
|
||||
{
|
||||
info = g_file_query_info (source,
|
||||
G_FILE_ATTRIBUTE_STANDARD_SIZE,
|
||||
G_FILE_QUERY_INFO_NONE,
|
||||
cancellable, NULL);
|
||||
info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (in),
|
||||
G_FILE_ATTRIBUTE_STANDARD_SIZE,
|
||||
cancellable, NULL);
|
||||
if (info)
|
||||
{
|
||||
if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
|
||||
total_size = g_file_info_get_size (info);
|
||||
g_object_unref (info);
|
||||
}
|
||||
|
||||
if (total_size == -1)
|
||||
{
|
||||
info = g_file_query_info (source,
|
||||
G_FILE_ATTRIBUTE_STANDARD_SIZE,
|
||||
G_FILE_QUERY_INFO_NONE,
|
||||
cancellable, NULL);
|
||||
if (info)
|
||||
{
|
||||
if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
|
||||
total_size = g_file_info_get_size (info);
|
||||
g_object_unref (info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (total_size == -1)
|
||||
|
Loading…
Reference in New Issue
Block a user