]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb: allow a timeout of -1 result in no timeout timer at all.
authorStefan Metzmacher <metze@samba.org>
Fri, 22 Jan 2016 07:53:57 +0000 (08:53 +0100)
committerGarming Sam <garming@samba.org>
Wed, 17 Feb 2016 02:43:22 +0000 (03:43 +0100)
This is required in order to have long running async searches,
e.g. with LDB_CONTROL_NOTIFICATION_OID.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/ldb/ldb_ldap/ldb_ldap.c
lib/ldb/ldb_sqlite3/ldb_sqlite3.c
lib/ldb/ldb_tdb/ldb_tdb.c

index 7e6ac903c8ad543c04af0f999eaa1b37668143dd..29f89388c5fd2c9ca764872f2f1ce1afa0865404 100644 (file)
@@ -252,8 +252,11 @@ static int lldb_search(struct lldb_context *lldb_ac)
                break;
        }
 
-       tv.tv_sec = req->timeout;
+       tv.tv_sec = 0;
        tv.tv_usec = 0;
+       if (req->timeout > 0) {
+               tv.tv_sec = req->timeout;
+       }
 
        ret = ldap_search_ext(lldb->ldap, search_base, ldap_scope, 
                              expression, 
@@ -836,12 +839,13 @@ static int lldb_handle_request(struct ldb_module *module, struct ldb_request *re
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-
-       tv.tv_sec = req->starttime + req->timeout;
-       tv.tv_usec = 0;
-       te = tevent_add_timer(ev, ac, tv, lldb_timeout, ac);
-       if (NULL == te) {
-               return LDB_ERR_OPERATIONS_ERROR;
+       if (req->timeout > 0) {
+               tv.tv_sec = req->starttime + req->timeout;
+               tv.tv_usec = 0;
+               te = tevent_add_timer(ev, ac, tv, lldb_timeout, ac);
+               if (NULL == te) {
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
        }
 
        return LDB_SUCCESS;
index 223868a6c0ad23d588d3a8fb08707b0305467888..60b39e89790f2c3ec8b6ea90d19061716d98b4ac 100644 (file)
@@ -1566,10 +1566,13 @@ static int lsql_handle_request(struct ldb_module *module, struct ldb_request *re
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       tv.tv_sec = req->starttime + req->timeout;
-       ac->timeout_event = tevent_add_timer(ev, ac, tv, lsql_timeout, ac);
-       if (NULL == ac->timeout_event) {
-               return LDB_ERR_OPERATIONS_ERROR;
+       if (req->timeout > 0) {
+               tv.tv_sec = req->starttime + req->timeout;
+               tv.tv_usec = 0;
+               ac->timeout_event = tevent_add_timer(ev, ac, tv, lsql_timeout, ac);
+               if (NULL == ac->timeout_event) {
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
        }
 
        return LDB_SUCCESS;
index bcb8f0fb141b0bba99e7e765d5f08da72e463f2e..8d1fd3600142e77854c1b01c380bab27a26271ff 100644 (file)
@@ -1469,11 +1469,15 @@ static int ltdb_handle_request(struct ldb_module *module,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       tv.tv_sec = req->starttime + req->timeout;
-       ac->timeout_event = tevent_add_timer(ev, ac, tv, ltdb_timeout, ac);
-       if (NULL == ac->timeout_event) {
-               talloc_free(ac);
-               return LDB_ERR_OPERATIONS_ERROR;
+       if (req->timeout > 0) {
+               tv.tv_sec = req->starttime + req->timeout;
+               tv.tv_usec = 0;
+               ac->timeout_event = tevent_add_timer(ev, ac, tv,
+                                                    ltdb_timeout, ac);
+               if (NULL == ac->timeout_event) {
+                       talloc_free(ac);
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
        }
 
        /* set a spy so that we do not try to use the request context