{
queue_node *node;
- if (_queue_is_empty(&surface_queue->free_queue)) {
- if (surface_queue->impl && surface_queue->impl->need_attach)
- surface_queue->impl->need_attach(surface_queue);
-
- if (_queue_is_empty(&surface_queue->free_queue)) {
- TBM_LOG_E("surface_queue->free_queue is empty.\n");
- return NULL;
- }
- }
-
node = _queue_node_pop_front(&surface_queue->free_queue);
return node;
pthread_mutex_lock(&surface_queue->lock);
+ if (_queue_is_empty(&surface_queue->free_queue)) {
+ if (surface_queue->impl && surface_queue->impl->need_attach)
+ surface_queue->impl->need_attach(surface_queue);
+
+ if (!_tbm_surface_queue_is_valid(surface_queue)) {
+ TBM_LOG_E("surface_queue:%p is invalid", surface_queue);
+ pthread_mutex_unlock(&surface_queue->lock);
+ _tbm_surf_queue_mutex_unlock();
+ return TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
+ }
+ }
+
if (surface_queue->impl && surface_queue->impl->dequeue)
node = surface_queue->impl->dequeue(surface_queue);
else