client: fix deadlock issue 53/171053/2
authorBoram Park <boram1288.park@samsung.com>
Mon, 26 Feb 2018 00:16:53 +0000 (09:16 +0900)
committerBoram Park <boram1288.park@samsung.com>
Mon, 26 Feb 2018 23:50:41 +0000 (08:50 +0900)
tdmp_vblank shouldn't be protected by mutex.

Change-Id: I9bf718402774d3109b0482c2e8f80c4baeee8c54

client/tdm_client.c

index 9d00023..41a5fe2 100644 (file)
@@ -487,8 +487,11 @@ tdm_client_destroy(tdm_client *client)
 
        pthread_mutex_lock(&private_client->lock);
 
-       if (private_client->temp_vblank)
+       if (private_client->temp_vblank) {
+               pthread_mutex_unlock(&private_client->lock);
                tdm_client_vblank_destroy(private_client->temp_vblank);
+               pthread_mutex_lock(&private_client->lock);
+       }
 
        LIST_FOR_EACH_ENTRY_SAFE(o, oo, &private_client->output_list, link) {
                _tdm_client_output_destroy(o);
@@ -578,20 +581,12 @@ _tdm_client_vblank_handler_temp(tdm_client_vblank *vblank, tdm_error error, unsi
                                                                unsigned int tv_sec, unsigned int tv_usec, void *user_data)
 {
        tdm_client_vblank_temp *vblank_temp = user_data;
-       tdm_private_client_vblank *private_vblank;
-       tdm_private_client *private_client;
 
        TDM_RETURN_IF_FAIL(vblank_temp != NULL);
        TDM_RETURN_IF_FAIL(vblank != NULL);
 
-       private_vblank = vblank;
-       private_client = private_vblank->private_output->private_client;
-
-       if (vblank_temp->func) {
-               pthread_mutex_unlock(&private_client->lock);
+       if (vblank_temp->func)
                vblank_temp->func(sequence, tv_sec, tv_usec, vblank_temp->user_data);
-               pthread_mutex_lock(&private_client->lock);
-       }
 
        free(vblank_temp);
 }