tdm_hwc: check hwc_commit_handler's validation before list deleting. 85/236185/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Mon, 15 Jun 2020 10:34:27 +0000 (19:34 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Mon, 15 Jun 2020 10:34:40 +0000 (19:34 +0900)
Change-Id: Id5c37bc169b0fb982ba1261823333cf8c7587933
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/tdm_hwc.c

index 31394a5..5f43860 100644 (file)
@@ -86,6 +86,22 @@ _tdm_hwc_find_private_hwc_window(tdm_private_hwc *private_hwc, tdm_hwc_window *h
        return NULL;
 }
 
+static tdm_error
+_tdm_hwc_check_hwc_commit_handler_validation(tdm_private_hwc *private_hwc, tdm_private_hwc_commit_handler *hwc_commit_handler)
+{
+       tdm_private_hwc_commit_handler *commit_handler = NULL;
+
+       if (LIST_IS_EMPTY(&private_hwc->hwc_commit_handler_list))
+               return TDM_ERROR_INVALID_PARAMETER;
+
+       LIST_FOR_EACH_ENTRY(commit_handler, &private_hwc->hwc_commit_handler_list, link) {
+               if (commit_handler == hwc_commit_handler)
+                       return TDM_ERROR_NONE;
+       }
+
+       return TDM_ERROR_INVALID_PARAMETER;
+}
+
 static void
 _tdm_hwc_thread_cb_commit(tdm_private_display *private_display, void *object,
                                tdm_thread_cb_base *cb_base, void *user_data)
@@ -104,6 +120,8 @@ _tdm_hwc_thread_cb_commit(tdm_private_display *private_display, void *object,
        tdm_thread_cb_remove(private_hwc, TDM_THREAD_CB_HWC_COMMIT, hwc_commit_handler,
                                        _tdm_hwc_thread_cb_commit, NULL);
 
+       TDM_RETURN_IF_FAIL(_tdm_hwc_check_hwc_commit_handler_validation(private_hwc, hwc_commit_handler) == TDM_ERROR_NONE)
+
        LIST_DEL(&hwc_commit_handler->link);
 
        if (tdm_debug_module & TDM_DEBUG_COMMIT) {