app: disallow a theoretical infinite loop if we run out of ids.
In practice, that's likely impossible to ever happen. This was just
itching my perfectionist self, who enjoys flawless design.
(cherry picked from commit 951393b34e)
This commit is contained in:
parent
dfaa321027
commit
a90e9ec5e7
1 changed files with 12 additions and 0 deletions
|
|
@ -127,15 +127,27 @@ gint
|
|||
gimp_id_table_insert (GimpIdTable *id_table, gpointer data)
|
||||
{
|
||||
gint new_id;
|
||||
gint start_id;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_ID_TABLE (id_table), 0);
|
||||
|
||||
start_id = id_table->priv->next_id;
|
||||
|
||||
do
|
||||
{
|
||||
new_id = id_table->priv->next_id++;
|
||||
|
||||
if (id_table->priv->next_id == GIMP_ID_TABLE_END_ID)
|
||||
id_table->priv->next_id = GIMP_ID_TABLE_START_ID;
|
||||
|
||||
if (start_id == id_table->priv->next_id)
|
||||
{
|
||||
/* We looped once over all used ids. Very unlikely to happen.
|
||||
And if it does, there is probably not much to be done.
|
||||
It is just good design not to allow a theoretical infinite loop. */
|
||||
g_error ("%s: out of ids!", G_STRFUNC);
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (gimp_id_table_lookup (id_table, new_id));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue