Fix extended operation return path.
authorSimo Sorce <idra@samba.org>
Tue, 10 Mar 2009 14:05:52 +0000 (10:05 -0400)
committerSimo Sorce <idra@samba.org>
Tue, 10 Mar 2009 15:08:53 +0000 (11:08 -0400)
Extended operations return was not going thorugh the same patch as others
leaving the ctx around. Plus we were neutralizing the spy too early so that it
didn't set the request_terminated flag as it should have.

This should hopefully fix the failures in the build farm.

source4/lib/ldb/ldb_tdb/ldb_tdb.c

index d38cb828bbe61e69c677251af7ab795634abf0a6..9df62be93631baad29a71c60aea97ad2d75a2761 100644 (file)
@@ -1020,13 +1020,14 @@ static void ltdb_timeout(struct tevent_context *ev,
        ctx = talloc_get_type(private_data, struct ltdb_context);
 
        if (!ctx->request_terminated) {
        ctx = talloc_get_type(private_data, struct ltdb_context);
 
        if (!ctx->request_terminated) {
-               /* neutralize the spy */
-               ctx->spy->ctx = NULL;
-
                /* request is done now */
                ltdb_request_done(ctx, LDB_ERR_TIME_LIMIT_EXCEEDED);
        }
 
                /* request is done now */
                ltdb_request_done(ctx, LDB_ERR_TIME_LIMIT_EXCEEDED);
        }
 
+       if (!ctx->request_terminated) {
+               /* neutralize the spy */
+               ctx->spy->ctx = NULL;
+       }
        talloc_free(ctx);
 }
 
        talloc_free(ctx);
 }
 
@@ -1086,10 +1087,9 @@ static void ltdb_callback(struct tevent_context *ev,
 
        ctx = talloc_get_type(private_data, struct ltdb_context);
 
 
        ctx = talloc_get_type(private_data, struct ltdb_context);
 
-       if (!ctx->request_terminated) {
-               /* neutralize the spy */
-               ctx->spy->ctx = NULL;
-       } else goto done;
+       if (ctx->request_terminated) {
+               goto done;
+       }
 
        switch (ctx->req->operation) {
        case LDB_SEARCH:
 
        switch (ctx->req->operation) {
        case LDB_SEARCH:
@@ -1109,7 +1109,7 @@ static void ltdb_callback(struct tevent_context *ev,
                break;
        case LDB_EXTENDED:
                ltdb_handle_extended(ctx);
                break;
        case LDB_EXTENDED:
                ltdb_handle_extended(ctx);
-               return;
+               goto done;
        default:
                /* no other op supported */
                ret = LDB_ERR_UNWILLING_TO_PERFORM;
        default:
                /* no other op supported */
                ret = LDB_ERR_UNWILLING_TO_PERFORM;
@@ -1121,6 +1121,10 @@ static void ltdb_callback(struct tevent_context *ev,
        }
 
 done:
        }
 
 done:
+       if (!ctx->request_terminated) {
+               /* neutralize the spy */
+               ctx->spy->ctx = NULL;
+       }
        talloc_free(ctx);
 }
 
        talloc_free(ctx);
 }