eina thread queue/semaphores - check even more unlikely errors + complain
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Fri, 5 Aug 2016 08:38:02 +0000 (17:38 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Fri, 5 Aug 2016 08:38:02 +0000 (17:38 +0900)
check some really unlikely alloc errors and semaphore deadlock errors
and report if that has happened. just in case.

src/lib/eina/eina_inline_lock_posix.x
src/lib/eina/eina_thread_queue.c

index 58194e5..c28a2d0 100644 (file)
@@ -888,7 +888,11 @@ eina_semaphore_lock(Eina_Semaphore *sem)
         else
           {
              if (errno != EINTR)
-               break;
+               {
+                  if (errno == EDEADLK)
+                    EINA_LOCK_DEADLOCK_DEBUG(sem_wait, sem);
+                  break;
+               }
           }
      }
    return ok;
index 6bf0c53..190d772 100644 (file)
@@ -116,7 +116,11 @@ _eina_thread_queue_msg_block_new(int size)
    blk = malloc(sizeof(Eina_Thread_Queue_Msg_Block) -
                 sizeof(Eina_Thread_Queue_Msg) +
                 size);
-   if (!blk) return NULL;
+   if (!blk)
+     {
+        ERR("Thread queue block buffer of size %i allocation failed", size);
+        return NULL;
+     }
    blk->next = NULL;
 #ifndef ATOMIC
    eina_spinlock_new(&(blk->lock_ref));
@@ -380,7 +384,11 @@ eina_thread_queue_new(void)
    Eina_Thread_Queue *thq;
 
    thq = calloc(1, sizeof(Eina_Thread_Queue));
-   if (!thq) return NULL;
+   if (!thq)
+     {
+        ERR("Allocation of Thread queue structure failed");
+        return NULL;
+     }
    thq->fd = -1;
    if (!eina_semaphore_new(&(thq->sem), 0))
      {