Print this page
XXXX cpudrv attach error handling is leaky

*** 312,321 **** --- 312,327 ---- * activities. */ cpudsp->cpudrv_pm.tq = ddi_taskq_create(dip, "cpudrv_monitor", CPUDRV_TASKQ_THREADS, TASKQ_DEFAULTPRI, 0); + if (cpudsp->cpudrv_pm.tq == NULL) { + cpudrv_enabled = B_FALSE; + cpudrv_free(cpudsp); + ddi_soft_state_free(cpudrv_state, instance); + return (DDI_FAILURE); + } mutex_init(&cpudsp->cpudrv_pm.timeout_lock, NULL, MUTEX_DRIVER, NULL); cv_init(&cpudsp->cpudrv_pm.timeout_cv, NULL, CV_DEFAULT, NULL);
*** 346,355 **** --- 352,362 ---- if (!cpudrv_mach_init(cpudsp)) { cmn_err(CE_WARN, "cpudrv_attach: instance %d: " "cpudrv_mach_init failed", instance); cpudrv_enabled = B_FALSE; + ddi_taskq_destroy(cpudsp->cpudrv_pm.tq); cpudrv_free(cpudsp); ddi_soft_state_free(cpudrv_state, instance); return (DDI_FAILURE); }