Blob Blame History Raw
diff -up system-config-printer-1.1.17/pycups-1.9.48/cupsconnection.c.cupsconnection-dealloc system-config-printer-1.1.17/pycups-1.9.48/cupsconnection.c
--- system-config-printer-1.1.17/pycups-1.9.48/cupsconnection.c.cupsconnection-dealloc	2010-03-08 17:06:47.000000000 +0100
+++ system-config-printer-1.1.17/pycups-1.9.48/cupsconnection.c	2010-03-08 17:06:47.000000000 +0100
@@ -231,37 +231,43 @@ Connection_dealloc (Connection *self)
 {
   int i, j;
 
-  if (NumConnections > 1)
-  {
-    Connection **new_array = calloc (NumConnections - 1,
-				     sizeof (Connection *));
+  for (j = 0; j < NumConnections; j++)
+    if (Connections[j] == self)
+      break;
 
-    for (i = 0, j = 0; i < NumConnections; i++)
+  if (j < NumConnections)
+  {
+    if (NumConnections > 1)
     {
-      if (Connections[i] == self)
+      Connection **new_array = calloc (NumConnections - 1,
+				       sizeof (Connection *));
+
+      if (new_array)
       {
-	if (!new_array)
-	  Connections[i] = NULL;
+	int k;
+	for (i = 0, k = 0; i < NumConnections; i++)
+	{
+	  if (i == j)
+	    continue;
 
-	continue;
-      }
+	  new_array[k++] = Connections[i];
+	}
 
-      if (new_array)
-	new_array[j++] = Connections[i];
+	free (Connections);
+	Connections = new_array;
+	NumConnections--;
+      } else
+	/* Failed to allocate memory. Just clear out the reference. */
+	Connections[j] = NULL;
     }
-
-    if (new_array) {
+    else
+    {
+      /* The only element is the one we no longer need. */
       free (Connections);
-      Connections = new_array;
-      NumConnections--;
+      Connections = NULL;
+      NumConnections = 0;
     }
   }
-  else
-  {
-    free (Connections);
-    Connections = NULL;
-    NumConnections = 0;
-  }
 
   if (self->http) {  
     debugprintf ("httpClose()\n");