Fix the logic for message queue management 78/34278/1 submit/tizen/20150123.164415
authorBaptiste DURAND <baptiste.durand@open.eurogiciel.org>
Thu, 22 Jan 2015 15:32:59 +0000 (16:32 +0100)
committerBaptiste DURAND <baptiste.durand@open.eurogiciel.org>
Thu, 22 Jan 2015 15:32:59 +0000 (16:32 +0100)
BUG-Tizen=TC-2391
Signed-off-by: Baptiste DURAND <baptiste.durand@open.eurogiciel.org>
Change-Id: Ia70b5c2aff959044a648d74deef7fb3c421c247d

server/src/pkgmgr-server.c

index 5870a7c..0fa6580 100644 (file)
@@ -1482,16 +1482,13 @@ gboolean queue_job(void *data)
        int pos = 0;
        /* Pop a job from queue */
 pop:
-       if (!__is_backend_busy(pos % num_of_backends)) {
-               item = _pm_queue_pop(pos % num_of_backends);
-               pos = (pos + 1) % num_of_backends;
-       }
-       else {
-               pos = (pos + 1) % num_of_backends;
-               goto pop;
-       }
-
-
+       if (!__is_backend_busy(pos % num_of_backends)) {
+               item = _pm_queue_pop(pos % num_of_backends);
+               pos = (pos + 1) % num_of_backends;
+       } else {
+               pos = (pos + 1) % num_of_backends;
+               goto pop;
+       }
        int ret = 0;
        char *backend_cmd = NULL;
 
@@ -1499,8 +1496,12 @@ pop:
        if ( (item == NULL) || (item->req_type == -1) ) {
                if(item)
                        free(item);
-               DBG("the queue is empty");
-               return FALSE;
+               DBG("the queue is empty for backend %d ", (pos + num_of_backends - 1) % num_of_backends);
+
+               if (pos == 0) // all backend messages queue are empty
+                       return FALSE;
+               else // check the next backend message queue
+                       goto pop;
        }
        __set_backend_busy((pos + num_of_backends - 1) % num_of_backends);
        __set_recovery_mode(item->pkgid, item->pkg_type);