Print this page
2831 svc.startd and svc.configd waste memory.
*** 371,383 ****
if (snap != NULL)
scf_snapshot_destroy(snap);
if (inst->ri_logstem != NULL)
startd_free(inst->ri_logstem, PATH_MAX);
if (inst->ri_common_name != NULL)
! startd_free(inst->ri_common_name, max_scf_value_size);
if (inst->ri_C_common_name != NULL)
! startd_free(inst->ri_C_common_name, max_scf_value_size);
snap = NULL;
inst->ri_logstem = NULL;
inst->ri_common_name = NULL;
inst->ri_C_common_name = NULL;
--- 371,385 ----
if (snap != NULL)
scf_snapshot_destroy(snap);
if (inst->ri_logstem != NULL)
startd_free(inst->ri_logstem, PATH_MAX);
if (inst->ri_common_name != NULL)
! startd_free(inst->ri_common_name,
! strlen(inst->ri_common_name) + 1);
if (inst->ri_C_common_name != NULL)
! startd_free(inst->ri_C_common_name,
! strlen(inst->ri_C_common_name) + 1);
snap = NULL;
inst->ri_logstem = NULL;
inst->ri_common_name = NULL;
inst->ri_C_common_name = NULL;
*** 527,538 ****
default:
assert(0);
abort();
}
! switch (libscf_get_template_values(scf_inst, snap,
! &inst->ri_common_name, &inst->ri_C_common_name)) {
case 0:
break;
case ECONNABORTED:
libscf_handle_rebind(h);
--- 529,557 ----
default:
assert(0);
abort();
}
! r = libscf_get_template_values(scf_inst, snap,
! &inst->ri_common_name, &inst->ri_C_common_name);
!
! /*
! * Copy our names to smaller buffers to reduce our memory footprint.
! */
! if (inst->ri_common_name != NULL) {
! char *tmp = safe_strdup(inst->ri_common_name);
! startd_free(inst->ri_common_name, max_scf_value_size);
! inst->ri_common_name = tmp;
! }
!
! if (inst->ri_C_common_name != NULL) {
! char *tmp = safe_strdup(inst->ri_C_common_name);
! startd_free(inst->ri_C_common_name, max_scf_value_size);
! inst->ri_C_common_name = tmp;
! }
!
! switch (r) {
case 0:
break;
case ECONNABORTED:
libscf_handle_rebind(h);
*** 676,688 ****
startd_free((void *)inst->ri_i.i_fmri, strlen(inst->ri_i.i_fmri) + 1);
uu_list_destroy(inst->ri_queue);
if (inst->ri_logstem != NULL)
startd_free(inst->ri_logstem, PATH_MAX);
if (inst->ri_common_name != NULL)
! startd_free(inst->ri_common_name, max_scf_value_size);
if (inst->ri_C_common_name != NULL)
! startd_free(inst->ri_C_common_name, max_scf_value_size);
startd_free(inst->ri_utmpx_prefix, max_scf_value_size);
startd_free(inst, sizeof (restarter_inst_t));
return (ENOENT);
}
--- 695,709 ----
startd_free((void *)inst->ri_i.i_fmri, strlen(inst->ri_i.i_fmri) + 1);
uu_list_destroy(inst->ri_queue);
if (inst->ri_logstem != NULL)
startd_free(inst->ri_logstem, PATH_MAX);
if (inst->ri_common_name != NULL)
! startd_free(inst->ri_common_name,
! strlen(inst->ri_common_name) + 1);
if (inst->ri_C_common_name != NULL)
! startd_free(inst->ri_C_common_name,
! strlen(inst->ri_C_common_name) + 1);
startd_free(inst->ri_utmpx_prefix, max_scf_value_size);
startd_free(inst, sizeof (restarter_inst_t));
return (ENOENT);
}
*** 738,750 ****
uu_list_destroy(ri->ri_queue);
startd_free((void *)ri->ri_i.i_fmri, strlen(ri->ri_i.i_fmri) + 1);
startd_free(ri->ri_logstem, PATH_MAX);
if (ri->ri_common_name != NULL)
! startd_free(ri->ri_common_name, max_scf_value_size);
if (ri->ri_C_common_name != NULL)
! startd_free(ri->ri_C_common_name, max_scf_value_size);
startd_free(ri->ri_utmpx_prefix, max_scf_value_size);
(void) pthread_mutex_destroy(&ri->ri_lock);
(void) pthread_mutex_destroy(&ri->ri_queue_lock);
startd_free(ri, sizeof (restarter_inst_t));
}
--- 759,773 ----
uu_list_destroy(ri->ri_queue);
startd_free((void *)ri->ri_i.i_fmri, strlen(ri->ri_i.i_fmri) + 1);
startd_free(ri->ri_logstem, PATH_MAX);
if (ri->ri_common_name != NULL)
! startd_free(ri->ri_common_name,
! strlen(ri->ri_common_name) + 1);
if (ri->ri_C_common_name != NULL)
! startd_free(ri->ri_C_common_name,
! strlen(ri->ri_C_common_name) + 1);
startd_free(ri->ri_utmpx_prefix, max_scf_value_size);
(void) pthread_mutex_destroy(&ri->ri_lock);
(void) pthread_mutex_destroy(&ri->ri_queue_lock);
startd_free(ri, sizeof (restarter_inst_t));
}
*** 1839,1848 ****
--- 1862,1872 ----
if (uu_list_first(rip->ri_queue) != NULL)
goto again;
rip->ri_queue_thread = 0;
MUTEX_UNLOCK(&rip->ri_queue_lock);
+
out:
(void) scf_handle_unbind(h);
scf_handle_destroy(h);
free(fmri);
return (NULL);