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.
This commit is contained in:
Jehan 2013-09-20 01:54:02 +12:00
parent b7afb811cb
commit 951393b34e
1 changed files with 12 additions and 0 deletions

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