add verification for tdm_vblank 15/163615/3
authorRoman Marchenko <r.marchenko@samsung.com>
Mon, 11 Dec 2017 11:59:43 +0000 (13:59 +0200)
committerRoman Marchenko <r.marchenko@samsung.com>
Tue, 12 Dec 2017 10:31:42 +0000 (12:31 +0200)
Change-Id: I2858c8a23497ea205d25c732bda40492d9820d99
Signed-off-by: Roman Marchenko <r.marchenko@samsung.com>
src/tdm_vblank.c

index 6f6e7d2..ea485a3 100644 (file)
@@ -175,6 +175,25 @@ _print_list(struct list_head *list)
 }
 #endif
 
+static int
+tdm_vblank_is_valide(tdm_vblank *vblank)
+{
+       tdm_private_vblank *v = NULL;
+
+       if (vblank && vblank_list_inited) {
+               pthread_mutex_lock(&valid_list_lock);
+               LIST_FOR_EACH_ENTRY(v, &valid_vblank_list, valid_link) {
+                       if (v == (tdm_private_vblank *)vblank) {
+                               pthread_mutex_unlock(&valid_list_lock);
+                               return 1;
+                       }
+               }
+               pthread_mutex_unlock(&valid_list_lock);
+
+       }
+       return 0;
+}
+
 static void
 _tdm_vblank_valid_list_add(struct list_head *valid_link, struct list_head *valid_list)
 {
@@ -361,7 +380,7 @@ _tdm_vblank_cb_output_change(tdm_output *output, tdm_output_change_type type,
 {
        tdm_private_vblank *private_vblank = user_data;
 
-       TDM_RETURN_IF_FAIL(private_vblank != NULL);
+       TDM_RETURN_IF_FAIL(tdm_vblank_is_valide(private_vblank));
 
        switch (type) {
        case TDM_OUTPUT_CHANGE_DPMS:
@@ -527,8 +546,7 @@ tdm_vblank_destroy(tdm_vblank *vblank)
        tdm_private_vblank *private_vblank = vblank;
        tdm_vblank_wait_info *w = NULL, *ww = NULL;
 
-       if (!private_vblank)
-               return;
+       TDM_RETURN_IF_FAIL(tdm_vblank_is_valide(vblank));
 
        _tdm_vblank_valid_list_del(&private_vblank->valid_link);
 
@@ -559,7 +577,7 @@ tdm_vblank_set_name(tdm_vblank *vblank, const char *name)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
 
        if (!name)
                name = TDM_VBLANK_DEFAULT_NAME;
@@ -577,7 +595,7 @@ tdm_vblank_get_name(tdm_vblank *vblank, const char **name)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(name != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        *name = (const char*)private_vblank->name;
@@ -590,7 +608,7 @@ tdm_vblank_set_fps(tdm_vblank *vblank, unsigned int fps)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(fps > 0, TDM_ERROR_INVALID_PARAMETER);
 
        if (private_vblank->fps != fps || private_vblank->fps_changeable)
@@ -612,7 +630,7 @@ tdm_vblank_get_fps(tdm_vblank *vblank, unsigned int *fps)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(fps != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        *fps = private_vblank->fps;
@@ -625,7 +643,7 @@ tdm_vblank_ignore_global_fps(tdm_vblank *vblank, unsigned int ignore)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
 
        if (private_vblank->ignore_global_fps == ignore)
                return TDM_ERROR_NONE;
@@ -643,7 +661,7 @@ tdm_vblank_set_offset(tdm_vblank *vblank, int offset)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
 
        if (private_vblank->offset == offset)
                return TDM_ERROR_NONE;
@@ -661,7 +679,7 @@ tdm_vblank_get_offset(tdm_vblank *vblank, int *offset)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(offset != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        *offset = private_vblank->offset;
@@ -674,7 +692,7 @@ tdm_vblank_set_enable_fake(tdm_vblank *vblank, unsigned int enable_fake)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
 
        if (private_vblank->enable_fake == enable_fake)
                return TDM_ERROR_NONE;
@@ -691,7 +709,7 @@ tdm_vblank_get_enable_fake(tdm_vblank *vblank, unsigned int *enable_fake)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(enable_fake != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        *enable_fake = private_vblank->enable_fake;
@@ -774,7 +792,7 @@ _tdm_vblank_cb_vblank_HW(tdm_output *output, unsigned int sequence,
        }
 
        private_vblank = wait_info->private_vblank;
-       TDM_RETURN_IF_FAIL(private_vblank != NULL);
+       TDM_RETURN_IF_FAIL(tdm_vblank_is_valide(private_vblank));
 
        if (!_tdm_vblank_find_wait(wait_info, &private_vblank->HW_wait_list)) {
                VDB("can't find wait(%p)", wait_info);
@@ -913,7 +931,7 @@ _tdm_vblank_cb_vblank_SW(void *user_data)
 {
        tdm_private_vblank *private_vblank = user_data;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_OPERATION_FAILED);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(private_vblank), TDM_ERROR_OPERATION_FAILED);
 
        return tdm_vblank_cb_vblank_SW(private_vblank, 0);
 }
@@ -1064,7 +1082,7 @@ tdm_vblank_wait(tdm_vblank *vblank, unsigned int req_sec, unsigned int req_usec,
        unsigned int fps;
        tdm_error ret;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        if (private_vblank->owner_tid != syscall(SYS_gettid)) {
@@ -1180,7 +1198,7 @@ tdm_vblank_wait_seq(tdm_vblank *vblank, unsigned int req_sec, unsigned int req_u
        tdm_private_vblank *private_vblank = vblank;
        unsigned int interval;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        /* if the sequence of vblank reaches the max value, sequence can be 0. */
@@ -1230,7 +1248,7 @@ tdm_vblank_set_add_front(tdm_vblank *vblank, unsigned int add_front)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
 
        TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), TDM_ERROR_OPERATION_FAILED);
 
@@ -1248,7 +1266,7 @@ tdm_vblank_set_resource(tdm_vblank *vblank, struct wl_resource *resource)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
        TDM_RETURN_VAL_IF_FAIL(private_vblank->resource == NULL, TDM_ERROR_OPERATION_FAILED);
 
        private_vblank->resource = resource;
@@ -1261,7 +1279,7 @@ tdm_vblank_get_stamp(tdm_vblank *vblank)
 {
        tdm_private_vblank *private_vblank = vblank;
 
-       TDM_RETURN_VAL_IF_FAIL(private_vblank != NULL, TDM_ERROR_INVALID_PARAMETER);
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valide(vblank), TDM_ERROR_INVALID_PARAMETER);
 
        return private_vblank->stamp;
 }