#include <png.h>
#include <pixman.h>
+#define TBM_SURFACE_MAGIC 0xBF021234
+
static tbm_bufmgr g_surface_bufmgr;
static pthread_mutex_t tbm_surface_lock = PTHREAD_MUTEX_INITIALIZER;
void _tbm_surface_mutex_unlock(void);
/* LCOV_EXCL_STOP */
static int
-_tbm_surface_internal_is_valid(tbm_surface_h surface)
+_tbm_surface_internal_magic_check(tbm_surface_h surface)
{
- tbm_surface_h old_data = NULL;
+ if (surface->magic != TBM_SURFACE_MAGIC)
+ return 0;
- TBM_RETURN_VAL_IF_FAIL(g_surface_bufmgr, 0);
- TBM_RETURN_VAL_IF_FAIL(surface, 0);
+ return 1;
+}
- if (!LIST_IS_EMPTY(&g_surface_bufmgr->surf_list)) {
- LIST_FOR_EACH_ENTRY(old_data, &g_surface_bufmgr->surf_list, item_link) {
- if (old_data == surface)
- return 1;
- }
+static int
+_tbm_surface_internal_is_valid(tbm_surface_h surface)
+{
+ if (!surface) {
+ _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
+ TBM_ERR("error: No valid tbm_surface is NULL\n");
+ return 0;
}
- _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
-
- TBM_ERR("error: No valid tbm_surface(%p)\n", surface);
+ if (!_tbm_surface_internal_magic_check(surface)) {
+ _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
+ TBM_ERR("error: No valid tbm_surface(%p)\n", surface);
+ return 0;
+ }
- return 0;
+ return 1;
}
static int
}
LIST_DEL(&surface->item_link);
+ surface->magic = 0;
free(surface);
surface = NULL;
/* LCOV_EXCL_STOP */
}
+ surf->magic = TBM_SURFACE_MAGIC;
surf->bufmgr = bufmgr;
surf->info.width = width;
surf->info.height = height;
/* LCOV_EXCL_STOP */
}
+ surf->magic = TBM_SURFACE_MAGIC;
surf->bufmgr = bufmgr;
surf->info.width = info->width;
surf->info.height = info->height;