(keys_len + 1) * sizeof (char *));
if (tmp == NULL)
{
- ERROR ("uc_purge: realloc failed.");
+ ERROR ("uc_check_timeout: realloc failed.");
c_avl_iterator_destroy (iter);
+ sfree (keys);
pthread_mutex_unlock (&cache_lock);
return (-1);
}
}
} /* while (c_avl_iterator_next) */
+ ce = NULL;
+
for (i = 0; i < keys_len; i++)
{
int status;
{
ERROR ("uc_check_timeout: ut_check_interesting failed.");
sfree (keys[i]);
+ continue;
}
else if (status == 0) /* ``service'' is uninteresting */
{
- ce = NULL;
DEBUG ("uc_check_timeout: %s is missing but ``uninteresting''",
keys[i]);
status = c_avl_remove (cache_tree, keys[i],
DEBUG ("uc_check_timeout: %s is missing, sending notification.",
keys[i]);
ce->state = STATE_MISSING;
+ /* Do not free `keys[i]' so a notification is sent further down. */
}
else if (status == 1) /* do not persist */
{
DEBUG ("uc_check_timeout: %s is missing but "
"notification has already been sent.",
keys[i]);
+ /* Set `keys[i]' to NULL to no notification is sent. */
sfree (keys[i]);
}
else /* (ce->state != STATE_MISSING) */
DEBUG ("uc_check_timeout: %s is missing, sending one notification.",
keys[i]);
ce->state = STATE_MISSING;
+ /* Do not free `keys[i]' so a notification is sent further down. */
}
}
else
WARNING ("uc_check_timeout: ut_check_interesting (%s) returned "
"invalid status %i.",
keys[i], status);
+ sfree (keys[i]);
}
} /* for (keys[i]) */