r20670: Make the logic more clear
authorSimo Sorce <idra@samba.org>
Wed, 10 Jan 2007 22:31:42 +0000 (22:31 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:40:19 +0000 (14:40 -0500)
(This used to be commit 906630f18e5fab4be6c40018aafe67df1e27c92e)

source4/lib/ldb/modules/asq.c

index 0c7cd7f0d46cd8f87b6b1fb5638556bfe9b11339..413f6732ac629d57e810cfed858635e444dfc059 100644 (file)
@@ -339,22 +339,25 @@ static int asq_search_continue(struct ldb_handle *handle)
                        handle->status = ac->base_req->handle->status;
                        goto done;
                }
-               if (ac->base_req->handle->state != LDB_ASYNC_DONE) {
-                       return LDB_SUCCESS;
-               }
 
-               /* build up the requests call chain */
-               ret = asq_build_multiple_requests(ac, handle);
-               if (ret != LDB_SUCCESS) {
-                       return ret;
-               }
-               if (handle->state == LDB_ASYNC_DONE) {
-                       return LDB_SUCCESS;
-               }
+               if (ac->base_req->handle->state == LDB_ASYNC_DONE) {
+
+                       /* build up the requests call chain */
+                       ret = asq_build_multiple_requests(ac, handle);
+                       if (ret != LDB_SUCCESS) {
+                               return ret;
+                       }
+                       if (handle->state == LDB_ASYNC_DONE) {
+                               return LDB_SUCCESS;
+                       }
+
+                       ac->step = ASQ_SEARCH_MULTI;
 
-               ac->step = ASQ_SEARCH_MULTI;
+                       return ldb_request(ac->module->ldb, ac->reqs[ac->cur_req]);
+               }
 
-               return ldb_request(ac->module->ldb, ac->reqs[ac->cur_req]);
+               /* request still pending, return to cycle again */
+               return LDB_SUCCESS;
 
        case ASQ_SEARCH_MULTI:
 
@@ -371,13 +374,16 @@ static int asq_search_continue(struct ldb_handle *handle)
                if (ac->reqs[ac->cur_req]->handle->state == LDB_ASYNC_DONE) {
                        ac->cur_req++;
 
-                       if (ac->cur_req >= ac->num_reqs) {
-                               return asq_terminate(handle);
+                       if (ac->cur_req < ac->num_reqs) {
+                               return ldb_request(ac->module->ldb, ac->reqs[ac->cur_req]);
                        }
 
-                       return ldb_request(ac->module->ldb, ac->reqs[ac->cur_req]);
+                       return asq_terminate(handle);
                }
 
+               /* request still pending, return to cycle again */
+               return LDB_SUCCESS;
+
        default:
                ret = LDB_ERR_OPERATIONS_ERROR;
                break;