LIST_INITHEAD(&private_voutput->buffer_list);
private_voutput->private_client = private_client;
- strncpy(private_voutput->name, name, TDM_NAME_LEN);
+ strncpy(private_voutput->name, name, TDM_NAME_LEN - 1);
+ private_voutput->name[TDM_NAME_LEN - 1] = '\0';
private_voutput->wl_voutput = wl_tdm_create_voutput((struct wl_tdm *)wrapper, name);
wl_proxy_wrapper_destroy(wrapper);
if (count != 0) {
private_voutput->available_modes.modes = calloc(count, sizeof(tdm_client_output_mode));
+ if (private_voutput->available_modes.modes == NULL) {
+ private_voutput->available_modes.count = 0;
+ pthread_mutex_unlock(&private_client->lock);
+ return TDM_ERROR_OUT_OF_MEMORY;
+ }
memcpy(private_voutput->available_modes.modes, modes, sizeof(tdm_client_output_mode) * count);
}
LIST_DEL(&h->link);
free(h);
+
+ pthread_mutex_unlock(&private_client->lock);
+
+ return;
}
pthread_mutex_unlock(&private_client->lock);