torture/basic: in run_derefopen() the file could have been deleted before the last...
authorMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Mon, 10 Aug 2009 08:12:51 +0000 (10:12 +0200)
committerMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Tue, 11 Aug 2009 10:59:14 +0000 (12:59 +0200)
Through a suggestion pointed out in bug #6622 the test file sometimes doesn't exist on
the last turn anymore. So we haven't to fail here since it could have been deleted by
a concurrent process (e.g. when the same test runs multiple times). Therefore also
NT_STATUS_OBJECT_NAME_NOT_FOUND is an acceptable result.

source4/torture/basic/base.c

index ea7b6c08fd31b88faee03f01e949d901a425da45..549db63b34fa24989b6dcfb949426f24c49f8d11 100644 (file)
@@ -693,8 +693,12 @@ static bool run_deferopen(struct torture_context *tctx, struct smbcli_state *cli
        }
 
        if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, fname))) {
-               /* All until the last unlink will fail with sharing violation. */
-               if (!NT_STATUS_EQUAL(smbcli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION)) {
+               /* All until the last unlink will fail with sharing violation
+                  but also the last request can fail since the file could have
+                  been successfully deleted by another (test) process */
+               NTSTATUS status = smbcli_nt_error(cli->tree);
+               if ((!NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION))
+                       && (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND))) {
                        torture_comment(tctx, "unlink of %s failed (%s)\n", fname, smbcli_errstr(cli->tree));
                        correct = false;
                }