add verification for tdm_output 14/163614/3
authorRoman Marchenko <r.marchenko@samsung.com>
Mon, 11 Dec 2017 11:57:43 +0000 (13:57 +0200)
committerRoman Marchenko <r.marchenko@samsung.com>
Tue, 12 Dec 2017 10:30:41 +0000 (12:30 +0200)
Change-Id: I59ae702314890cad08c8881357e8928a9878bcd4
Signed-off-by: Roman Marchenko <r.marchenko@samsung.com>
src/tdm.c
src/tdm_output.c
src/tdm_private.h
src/tdm_vblank.c

index 155a542..e36adf9 100644 (file)
--- a/src/tdm.c
+++ b/src/tdm.c
@@ -1019,6 +1019,7 @@ tdm_display_init(tdm_error *error)
        tdm_event_loop_create_backend_source(private_display);
 
        private_display->init_count = 1;
+       g_private_display = private_display;
 
        tdm_private_output *o = NULL;
        LIST_FOR_EACH_ENTRY(o, &private_display->output_list, link) {
@@ -1042,8 +1043,6 @@ tdm_display_init(tdm_error *error)
                                tdm_output_choose_commit_per_vblank_mode(o, mode);
        }
 
-       g_private_display = private_display;
-
        if (error)
                *error = TDM_ERROR_NONE;
 
@@ -1132,6 +1131,17 @@ tdm_display_is_valide(tdm_display *dpy)
        return 0;
 }
 
+INTERN int
+tdm_output_is_valide(tdm_output *output)
+{
+       tdm_private_output *o = NULL, *private_output = output;
+       if (output && g_private_display)
+               LIST_FOR_EACH_ENTRY(o, &g_private_display->output_list, link)
+                       if (o == private_output)
+                               return 1;
+       return 0;
+}
+
 /* LCOV_EXCL_START */
 INTERN int
 tdm_display_check_module_abi(tdm_private_display *private_display, int abimaj, int abimin)
index 6e08225..4a4cef7 100644 (file)
@@ -48,7 +48,7 @@
        tdm_private_display *private_display; \
        tdm_private_output *private_output; \
        tdm_error ret = TDM_ERROR_NONE; /* default TDM_ERROR_NONE */\
-       TDM_RETURN_VAL_IF_FAIL(output != NULL, TDM_ERROR_INVALID_PARAMETER); \
+       TDM_RETURN_VAL_IF_FAIL(tdm_output_is_valide(output), TDM_ERROR_INVALID_PARAMETER); \
        private_output = (tdm_private_output*)output; \
        private_display = private_output->private_display
 
@@ -56,7 +56,7 @@
        tdm_private_display *private_display; \
        tdm_private_output *private_output; \
        tdm_error ret = TDM_ERROR_NONE; /* default TDM_ERROR_NONE */\
-       TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(output != NULL, TDM_ERROR_INVALID_PARAMETER, NULL); \
+       TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(tdm_output_is_valide(output), TDM_ERROR_INVALID_PARAMETER, NULL); \
        private_output = (tdm_private_output*)output; \
        private_display = private_output->private_display
 
@@ -240,7 +240,7 @@ tdm_output_remove_change_handler(tdm_output *output,
        tdm_private_output *private_output;
        tdm_private_change_handler *h = NULL, *hh = NULL;
 
-       TDM_RETURN_IF_FAIL(output != NULL);
+       TDM_RETURN_IF_FAIL(tdm_output_is_valide(output));
        TDM_RETURN_IF_FAIL(func != NULL);
 
        private_output = (tdm_private_output*)output;
index a3a5948..de3e4d2 100644 (file)
@@ -460,6 +460,9 @@ tdm_pp_find_stamp(tdm_private_display *private_display, double stamp);
 tdm_private_capture *
 tdm_capture_find_stamp(tdm_private_display *private_display, double stamp);
 
+int
+tdm_output_is_valide(tdm_output *output);
+
 void
 tdm_output_cb_vblank(tdm_output *output_backend, unsigned int sequence,
                                         unsigned int tv_sec, unsigned int tv_usec, void *user_data);
index 4f5b4fe..6f6e7d2 100644 (file)
@@ -467,7 +467,7 @@ tdm_vblank_create(tdm_display *dpy, tdm_output *output, tdm_error *error)
        tdm_error ret;
 
        TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(tdm_display_is_valide(dpy), TDM_ERROR_INVALID_PARAMETER, NULL);
-       TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(output != NULL, TDM_ERROR_INVALID_PARAMETER, NULL);
+       TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(tdm_output_is_valide(output), TDM_ERROR_INVALID_PARAMETER, NULL);
 
        if (error)
                *error = TDM_ERROR_NONE;