diff options
-rw-r--r-- | source4/libcli/composite/loadfile.c | 21 | ||||
-rw-r--r-- | source4/libcli/composite/savefile.c | 21 |
2 files changed, 18 insertions, 24 deletions
diff --git a/source4/libcli/composite/loadfile.c b/source4/libcli/composite/loadfile.c index 37327ca62e..37f3608a4b 100644 --- a/source4/libcli/composite/loadfile.c +++ b/source4/libcli/composite/loadfile.c @@ -170,9 +170,6 @@ static NTSTATUS loadfile_close(struct smbcli_composite *c, NT_STATUS_NOT_OK_RETURN(status); c->state = SMBCLI_REQUEST_DONE; - if (c->async.fn) { - c->async.fn(c); - } return NT_STATUS_OK; } @@ -185,30 +182,30 @@ static void loadfile_handler(struct smbcli_request *req) { struct smbcli_composite *c = req->async.private; struct loadfile_state *state = talloc_get_type(c->private, struct loadfile_state); - NTSTATUS status; /* when this handler is called, the stage indicates what call has just finished */ switch (state->stage) { case LOADFILE_OPEN: - status = loadfile_open(c, state->io); + c->status = loadfile_open(c, state->io); break; case LOADFILE_READ: - status = loadfile_read(c, state->io); + c->status = loadfile_read(c, state->io); break; case LOADFILE_CLOSE: - status = loadfile_close(c, state->io); + c->status = loadfile_close(c, state->io); break; } - if (!NT_STATUS_IS_OK(status)) { - c->status = status; + if (!NT_STATUS_IS_OK(c->status)) { c->state = SMBCLI_REQUEST_ERROR; - if (c->async.fn) { - c->async.fn(c); - } + } + + if (c->state >= SMBCLI_REQUEST_DONE && + c->async.fn) { + c->async.fn(c); } } diff --git a/source4/libcli/composite/savefile.c b/source4/libcli/composite/savefile.c index c87ea178f9..5da5660127 100644 --- a/source4/libcli/composite/savefile.c +++ b/source4/libcli/composite/savefile.c @@ -171,9 +171,6 @@ static NTSTATUS savefile_close(struct smbcli_composite *c, } c->state = SMBCLI_REQUEST_DONE; - if (c->async.fn) { - c->async.fn(c); - } return NT_STATUS_OK; } @@ -186,30 +183,30 @@ static void savefile_handler(struct smbcli_request *req) { struct smbcli_composite *c = req->async.private; struct savefile_state *state = talloc_get_type(c->private, struct savefile_state); - NTSTATUS status; /* when this handler is called, the stage indicates what call has just finished */ switch (state->stage) { case SAVEFILE_OPEN: - status = savefile_open(c, state->io); + c->status = savefile_open(c, state->io); break; case SAVEFILE_WRITE: - status = savefile_write(c, state->io); + c->status = savefile_write(c, state->io); break; case SAVEFILE_CLOSE: - status = savefile_close(c, state->io); + c->status = savefile_close(c, state->io); break; } - if (!NT_STATUS_IS_OK(status)) { - c->status = status; + if (!NT_STATUS_IS_OK(c->status)) { c->state = SMBCLI_REQUEST_ERROR; - if (c->async.fn) { - c->async.fn(c); - } + } + + if (c->state >= SMBCLI_REQUEST_DONE && + c->async.fn) { + c->async.fn(c); } } |