tdm_client_vblank_destroy(tdm_client_vblank *vblank)
{
tdm_private_client_vblank *private_vblank;
+ tdm_private_client_output *private_output;
tdm_private_client *private_client;
tdm_client_wait_info *w = NULL, *ww = NULL;
TDM_RETURN_IF_FAIL(vblank != NULL);
private_vblank = vblank;
- private_client = private_vblank->private_output->private_client;
+
+ private_output = private_vblank->private_output;
+ if (!private_output) {
+ TDM_WRN("private_output is already destroyed.");
+ free(private_vblank);
+ return;
+ }
+
+ private_client = private_output->private_client;
+ if (!private_client) {
+ TDM_WRN("private_client is already destroyed.");
+ free(private_vblank);
+ return;
+ }
pthread_mutex_lock(&private_client->lock);