Index: ldb_search.c =================================================================== --- ldb_search.c (revision 26023) +++ ldb_search.c (working copy) @@ -483,12 +483,18 @@ ret = tdb_traverse_read(ltdb->tdb, search_func, handle); } - if (ret == -1) { - handle->status = LDB_ERR_OPERATIONS_ERROR; + if (ret == 0) { + ret = LDB_SUCCESS; + } else { + ret = LDB_ERR_OPERATIONS_ERROR; } - handle->state = LDB_ASYNC_DONE; - return LDB_SUCCESS; + if (ret == LDB_SUCCESS) { + handle->status = ret; + handle->state = LDB_ASYNC_DONE; + } + + return ret; } /* @@ -585,30 +591,22 @@ } } - if (ret != LDB_SUCCESS) { - req->handle->state = LDB_ASYNC_DONE; - req->handle->status = ret; - } - /* Finally send an LDB_REPLY_DONE packet when searching is finished */ ares = talloc_zero(req, struct ldb_reply); if (!ares) { - ltdb_unlock_read(module); - return LDB_ERR_OPERATIONS_ERROR; + ret = LDB_ERR_OPERATIONS_ERROR; } req->handle->state = LDB_ASYNC_DONE; - if (ret == LDB_SUCCESS) { ares->type = LDB_REPLY_DONE; - ret = req->callback(module->ldb, req->context, ares); - req->handle->status = ret; } - + req->handle->status = ret; + ltdb_unlock_read(module); - - return LDB_SUCCESS; + + return ret; }