validate check tbm surface 26/66726/1 accepted/tizen/ivi/20160421.011402 accepted/tizen/mobile/20160421.011517 accepted/tizen/tv/20160421.011430 accepted/tizen/wearable/20160421.011440 submit/tizen/20160420.130607
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 20 Apr 2016 12:59:28 +0000 (21:59 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Wed, 20 Apr 2016 13:00:50 +0000 (22:00 +0900)
Change-Id: Ie2e4aa87d933fb279cbc1a37382e4d19551de7da
Signed-off-by: Changyeon Lee <cyeon.lee@samsung.com>
src/tbm_bufmgr_int.h
src/tbm_surface.c
src/tbm_surface_internal.c

index aa7ed81..36fc796 100644 (file)
@@ -179,6 +179,7 @@ typedef struct {
 } tbm_user_data;
 
 int _tbm_bo_set_surface(tbm_bo bo, tbm_surface_h surface);
+int _tbm_surface_is_valid(tbm_surface_h surface);
 
 /* functions for mutex */
 int tbm_surface_internal_get_info(tbm_surface_h surface, int opt,
index f2d3e39..e169dec 100644 (file)
@@ -72,7 +72,7 @@ tbm_surface_create(int width, int height, tbm_format format)
 int
 tbm_surface_destroy(tbm_surface_h surface)
 {
-       if (!surface)
+       if (!_tbm_surface_is_valid(surface))
                return TBM_SURFACE_ERROR_INVALID_PARAMETER;
 
        tbm_surface_internal_destroy(surface);
@@ -83,7 +83,7 @@ tbm_surface_destroy(tbm_surface_h surface)
 int
 tbm_surface_map(tbm_surface_h surface, int opt, tbm_surface_info_s *info)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), TBM_SURFACE_ERROR_INVALID_PARAMETER);
        TBM_RETURN_VAL_IF_FAIL(info != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
 
        int ret = 0;
@@ -98,7 +98,7 @@ tbm_surface_map(tbm_surface_h surface, int opt, tbm_surface_info_s *info)
 int
 tbm_surface_unmap(tbm_surface_h surface)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), TBM_SURFACE_ERROR_INVALID_PARAMETER);
 
        tbm_surface_internal_unmap(surface);
 
@@ -108,7 +108,7 @@ tbm_surface_unmap(tbm_surface_h surface)
 int
 tbm_surface_get_info(tbm_surface_h surface, tbm_surface_info_s *info)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), TBM_SURFACE_ERROR_INVALID_PARAMETER);
        TBM_RETURN_VAL_IF_FAIL(info != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
 
        int ret = 0;
@@ -123,7 +123,7 @@ tbm_surface_get_info(tbm_surface_h surface, tbm_surface_info_s *info)
 int
 tbm_surface_get_width(tbm_surface_h surface)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), TBM_SURFACE_ERROR_INVALID_PARAMETER);
 
        return tbm_surface_internal_get_width(surface);
 }
@@ -131,7 +131,7 @@ tbm_surface_get_width(tbm_surface_h surface)
 int
 tbm_surface_get_height(tbm_surface_h surface)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface != NULL, TBM_SURFACE_ERROR_INVALID_PARAMETER);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), TBM_SURFACE_ERROR_INVALID_PARAMETER);
 
        return tbm_surface_internal_get_height(surface);
 }
@@ -139,7 +139,7 @@ tbm_surface_get_height(tbm_surface_h surface)
 tbm_format
 tbm_surface_get_format(tbm_surface_h surface)
 {
-       if (!surface) {
+       if (!_tbm_surface_is_valid(surface)) {
 #ifdef HAVE_CAPI_0_1_1
                set_last_result(TBM_SURFACE_ERROR_INVALID_PARAMETER);
 #endif
index 49d4db6..bc01935 100644 (file)
@@ -38,6 +38,23 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 static tbm_bufmgr g_surface_bufmgr;
 static pthread_mutex_t tbm_surface_lock;
 
+int
+_tbm_surface_is_valid(tbm_surface_h surface)
+{
+       tbm_surface_h old_data = NULL, tmp = NULL;
+
+       if (surface == NULL || g_surface_bufmgr == NULL)
+               return 0;
+
+       if (!LIST_IS_EMPTY(&g_surface_bufmgr->surf_list)) {
+               LIST_FOR_EACH_ENTRY_SAFE(old_data, tmp, &g_surface_bufmgr->surf_list, item_link) {
+                       if (old_data == surface)
+                               return 1;
+               }
+       }
+       return 0;
+}
+
 char *
 _tbm_surface_internal_format_to_str(tbm_format format)
 {
@@ -680,7 +697,7 @@ bail1:
 void
 tbm_surface_internal_destroy(tbm_surface_h surface)
 {
-       if (!surface)
+       if (!_tbm_surface_is_valid(surface))
                return;
 
        _tbm_surface_mutex_lock();
@@ -701,7 +718,7 @@ tbm_surface_internal_destroy(tbm_surface_h surface)
 void
 tbm_surface_internal_ref(tbm_surface_h surface)
 {
-       TBM_RETURN_IF_FAIL(surface);
+       TBM_RETURN_IF_FAIL(_tbm_surface_is_valid(surface));
 
        _tbm_surface_mutex_lock();
 
@@ -713,7 +730,7 @@ tbm_surface_internal_ref(tbm_surface_h surface)
 void
 tbm_surface_internal_unref(tbm_surface_h surface)
 {
-       TBM_RETURN_IF_FAIL(surface);
+       TBM_RETURN_IF_FAIL(_tbm_surface_is_valid(surface));
 
        _tbm_surface_mutex_lock();
 
@@ -733,7 +750,7 @@ tbm_surface_internal_unref(tbm_surface_h surface)
 int
 tbm_surface_internal_get_num_bos(tbm_surface_h surface)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
 
        struct _tbm_surface *surf;
        int num;
@@ -751,7 +768,7 @@ tbm_surface_internal_get_num_bos(tbm_surface_h surface)
 tbm_bo
 tbm_surface_internal_get_bo(tbm_surface_h surface, int bo_idx)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, NULL);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), NULL);
        TBM_RETURN_VAL_IF_FAIL(bo_idx > -1, NULL);
 
        struct _tbm_surface *surf;
@@ -770,7 +787,7 @@ tbm_surface_internal_get_bo(tbm_surface_h surface, int bo_idx)
 int
 tbm_surface_internal_get_size(tbm_surface_h surface)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
 
        struct _tbm_surface *surf;
        unsigned int size;
@@ -789,7 +806,7 @@ int
 tbm_surface_internal_get_plane_data(tbm_surface_h surface, int plane_idx,
                                    uint32_t *size, uint32_t *offset, uint32_t *pitch)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
        TBM_RETURN_VAL_IF_FAIL(plane_idx > -1, 0);
 
        struct _tbm_surface *surf;
@@ -821,6 +838,8 @@ int
 tbm_surface_internal_get_info(tbm_surface_h surface, int opt,
                              tbm_surface_info_s *info, int map)
 {
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
+
        struct _tbm_surface *surf;
        tbm_bo_handle bo_handles[4];
        int i, j;
@@ -873,6 +892,8 @@ tbm_surface_internal_get_info(tbm_surface_h surface, int opt,
 void
 tbm_surface_internal_unmap(tbm_surface_h surface)
 {
+       TBM_RETURN_IF_FAIL(_tbm_surface_is_valid(surface));
+
        struct _tbm_surface *surf;
        int i;
 
@@ -889,6 +910,8 @@ tbm_surface_internal_unmap(tbm_surface_h surface)
 unsigned int
 tbm_surface_internal_get_width(tbm_surface_h surface)
 {
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
+
        struct _tbm_surface *surf;
        unsigned int width;
 
@@ -905,6 +928,8 @@ tbm_surface_internal_get_width(tbm_surface_h surface)
 unsigned int
 tbm_surface_internal_get_height(tbm_surface_h surface)
 {
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
+
        struct _tbm_surface *surf;
        unsigned int height;
 
@@ -922,6 +947,8 @@ tbm_surface_internal_get_height(tbm_surface_h surface)
 tbm_format
 tbm_surface_internal_get_format(tbm_surface_h surface)
 {
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
+
        struct _tbm_surface *surf;
        tbm_format format;
 
@@ -938,7 +965,7 @@ tbm_surface_internal_get_format(tbm_surface_h surface)
 int
 tbm_surface_internal_get_plane_bo_idx(tbm_surface_h surface, int plane_idx)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
        TBM_RETURN_VAL_IF_FAIL(plane_idx > -1, 0);
        struct _tbm_surface *surf;
        int bo_idx;
@@ -964,7 +991,7 @@ _tbm_surface_internal_get_debug_pid(tbm_surface_h surface)
 void
 tbm_surface_internal_set_debug_pid(tbm_surface_h surface, unsigned int pid)
 {
-       TBM_RETURN_IF_FAIL(surface);
+       TBM_RETURN_IF_FAIL(_tbm_surface_is_valid(surface));
 
        surface->debug_pid = pid;
 }
@@ -973,7 +1000,7 @@ int
 tbm_surface_internal_add_user_data(tbm_surface_h surface, unsigned long key,
                                   tbm_data_free data_free_func)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
 
        tbm_user_data *data;
 
@@ -999,7 +1026,7 @@ int
 tbm_surface_internal_set_user_data(tbm_surface_h surface, unsigned long key,
                                   void *data)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
 
        tbm_user_data *old_data;
 
@@ -1022,7 +1049,7 @@ int
 tbm_surface_internal_get_user_data(tbm_surface_h surface, unsigned long key,
                                   void **data)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
 
        tbm_user_data *old_data;
 
@@ -1044,7 +1071,7 @@ int
 tbm_surface_internal_delete_user_data(tbm_surface_h surface,
                                      unsigned long key)
 {
-       TBM_RETURN_VAL_IF_FAIL(surface, 0);
+       TBM_RETURN_VAL_IF_FAIL(_tbm_surface_is_valid(surface), 0);
 
        tbm_user_data *old_data = (void *)0;