virtual: free output data when virtual output destroy 72/184872/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Tue, 24 Jul 2018 04:54:57 +0000 (13:54 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Tue, 24 Jul 2018 04:55:01 +0000 (13:55 +0900)
Change-Id: Ib193d05639a7762711fce2080ae5cc03ce1cf3df
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
backends/virtual/tdm_virtual_display.c

index 1e8f20c..14c1e62 100644 (file)
@@ -216,7 +216,8 @@ tdm_virtual_display_destroy_output_list(tdm_virtual_data *virtual_data)
                if (o->timer)
                        tdm_event_loop_source_remove(o->timer);
 
-               free(o->output_modes);
+               if (o->output_modes)
+                       free(o->output_modes);
                free(o);
        }
 }
@@ -477,11 +478,32 @@ virtual_display_output_destroy(tdm_backend_data *bdata, tdm_output *output)
        }
 
        if (find) {
+               tdm_virtual_layer_data *l = NULL, *ll = NULL;
+
+               tdm_backend_unregister_output(virtual_data->dpy, output);
+
+               if (!LIST_IS_EMPTY(&o->timer_event_list)) {
+                       tdm_virtual_event_data *e = NULL, *ee = NULL;
+                       LIST_FOR_EACH_ENTRY_SAFE(e, ee, &o->timer_event_list, link) {
+                               LIST_DEL(&e->link);
+                               free(e);
+                       }
+               }
+
+               if (o->timer)
+                       tdm_event_loop_source_remove(o->timer);
+
+               LIST_FOR_EACH_ENTRY_SAFE(l, ll, &o->layer_list, link) {
+                       LIST_DEL(&l->link);
+                       free(l);
+               }
+
                if (output_data->output_modes)
                        free(output_data->output_modes);
-               tdm_backend_unregister_output(virtual_data->dpy, output);
-       }
-       else
+
+               LIST_DEL(&o->link);
+               free(o);
+       } else
                return TDM_ERROR_INVALID_PARAMETER;
 
        return TDM_ERROR_NONE;
@@ -736,7 +758,8 @@ virtual_output_set_physical_size(tdm_output *output, unsigned int mmwidth, unsig
        return TDM_ERROR_NONE;
 }
 
-tdm_error virtual_output_set_connect(tdm_output *output)
+tdm_error
+virtual_output_set_connect(tdm_output *output)
 {
        tdm_virtual_output_data *output_data = output;
 
@@ -755,7 +778,8 @@ tdm_error virtual_output_set_connect(tdm_output *output)
        return TDM_ERROR_NONE;
 }
 
-tdm_error virtual_output_set_disconnect(tdm_output *output)
+tdm_error
+virtual_output_set_disconnect(tdm_output *output)
 {
        tdm_virtual_output_data *output_data = output;