[gimp] app: disallow a theoretical infinite loop if we run out of ids.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: disallow a theoretical infinite loop if we run out of ids.
- Date: Thu, 19 Sep 2013 14:44:01 +0000 (UTC)
commit 951393b34e6a33f862c91d38e5ca387d7c76b158
Author: Jehan <jehan girinstud io>
Date: Fri Sep 20 01:54:02 2013 +1200
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.
app/core/gimpidtable.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/app/core/gimpidtable.c b/app/core/gimpidtable.c
index 73394f9..8565bba 100644
--- a/app/core/gimpidtable.c
+++ b/app/core/gimpidtable.c
@@ -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));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]