app, pdb: do not leak a GFile in gimp_temp_file() or any future…
… PDB API which will return a newly allocated GFile.
Though gimp_temp_file() was so far the only such case where a returned
GFile was being leaked, it may happen again. So the PDB must instead
assume that all returned GFile-s have their own reference and take over
said reference.
And therefore update all other functions to increase the internal
GFile-s reference counts.
(cherry picked from commit b121ddd6f8)
This commit is contained in:
parent
c7c4c44f79
commit
d89cee9d1b
4 changed files with 22 additions and 6 deletions
|
|
@ -223,7 +223,7 @@ temp_file_invoker (GimpProcedure *procedure,
|
|||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2318,13 +2318,15 @@ image_get_file_invoker (GimpProcedure *procedure,
|
|||
if (success)
|
||||
{
|
||||
file = gimp_image_get_any_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
|
@ -2396,13 +2398,15 @@ image_get_xcf_file_invoker (GimpProcedure *procedure,
|
|||
if (success)
|
||||
{
|
||||
file = gimp_image_get_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
|
@ -2425,13 +2429,15 @@ image_get_imported_file_invoker (GimpProcedure *procedure,
|
|||
if (success)
|
||||
{
|
||||
file = gimp_image_get_imported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
|
@ -2454,13 +2460,15 @@ image_get_exported_file_invoker (GimpProcedure *procedure,
|
|||
if (success)
|
||||
{
|
||||
file = gimp_image_get_exported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_object (gimp_value_array_index (return_vals, 1), file);
|
||||
g_value_take_object (gimp_value_array_index (return_vals, 1), file);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2414,6 +2414,8 @@ HELP
|
|||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_any_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
|
|
@ -2500,6 +2502,8 @@ HELP
|
|||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
|
|
@ -2534,6 +2538,8 @@ HELP
|
|||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_imported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
|
|
@ -2567,6 +2573,8 @@ HELP
|
|||
code => <<'CODE'
|
||||
{
|
||||
file = gimp_image_get_exported_file (image);
|
||||
if (file)
|
||||
g_object_ref (file);
|
||||
}
|
||||
CODE
|
||||
);
|
||||
|
|
|
|||
|
|
@ -464,7 +464,7 @@ package Gimp::CodeGen::pdb;
|
|||
get_value_func => '$var = g_value_get_object ($value)',
|
||||
dup_value_func => '$var = GIMP_VALUES_DUP_FILE ($value)',
|
||||
set_value_func => 'g_value_set_object ($value, $var)',
|
||||
take_value_func => 'g_value_set_object ($value, $var)' },
|
||||
take_value_func => 'g_value_take_object ($value, $var)' },
|
||||
|
||||
parasite => { name => 'PARASITE',
|
||||
gtype => 'GIMP_TYPE_PARASITE',
|
||||
|
|
|
|||
Loading…
Reference in a new issue