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:
Jehan 2013-09-20 01:54:02 +12:00
parent dfaa321027
commit a90e9ec5e7

View file

@ -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));