Dan Smith wrote:
Moving these functions above the inst_list_init() calls will cause a
crash on error, because the out target tries to free them.
Mhh, as we have many free operations now that can handle NULL pointers,
I suggest to also make inst_list_free() able to handle NULL pointers.
As far as I can tell, these aren't related to the rest of the
patch in
any way. If there is something to fix here, perhaps we can call it
out and make it a distinct patch?
Agreed. I will cook up a patch for inst_list_free(). The intention to
move the inst_list_init() functions below connect_by_classname() was to
avoid some cycles, because the case where the provider exits right after
provider_is_responsible() or connect_by_classname() can happen often.
HE> @@ -138,19 +138,25 @@ static CMPIStatus
alloc_cap_instances(co
HE> if (id && !inst_id) {
HE> cu_statusf(broker, &s,
HE> CMPI_RC_ERR_NOT_FOUND,
HE> - "Requested Object could not be found.");
HE> + "No such instance (%s)", id);
Also, this change doesn't seem to be necessary, and makes this one
error message inconsistent with many others that we already have. If
this is a personal preference change, then it should be a distinct
patch that either changes (or plans to change) the other instances of
these error messages.
Agreed. I saw that we already have a task for "Fix up all the error
codes in returned status values (everything is currently
CMPI_RC_ERR_FAILED)". So we should leave this discussion for there. I
will remove this change.
HE> - if (names_only)
HE> - cu_return_instance_names(results, &alloc_cap_list);
HE> - else
HE> - cu_return_instances(results, &alloc_cap_list);
HE> + if (results) {
HE> + if (names_only)
HE> + cu_return_instance_names(results, &alloc_cap_list);
HE> + else
HE> + cu_return_instances(results, &alloc_cap_list);
HE> + } else {
HE> + if (inst)
HE> + *inst = alloc_cap_list.list[0];
HE> + }
I'm not okay with this change. From what I can see, this function was
modified to have a dual return path, where either results is passed
in, and inst is NULL, or vice versa. If you want to have the
opportunity to intercept the instances coming back, then the function
should take in an inst_list, and populate it. The caller can then
either return or inspect the result.
Very good catch. Sometimes the goal to make the best out of the existing
code makes oneself blind for bigger changes. Thanks.
Other places in the code, we have a function as described, and then
a
pass-through function called "return_foo()" that calls the function
that returns the list, and then calls cm_return_instance...(). Such a
function seems appropriate here.
--
Regards
Heidi Eckhart
Software Engineer
IBM Linux Technology Center - Open Hypervisor