summaryrefslogtreecommitdiff
path: root/source4/libcli
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-01-23 08:16:16 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:09:07 -0500
commit0db8b5a949dd84966c21828bc91cd9d54b082b71 (patch)
tree8150054644083d7a14355aeffd206eb3e7cf7b50 /source4/libcli
parent8eb0963c95bde4a8226f5d02ee0d8b478cf2dcc4 (diff)
downloadsamba-0db8b5a949dd84966c21828bc91cd9d54b082b71.tar.gz
samba-0db8b5a949dd84966c21828bc91cd9d54b082b71.tar.bz2
samba-0db8b5a949dd84966c21828bc91cd9d54b082b71.zip
r4936: moved to a convention where the completion function is only called in
one place. This makes the code more robust, and simpler (it would have prevented the error that volker found). (This used to be commit 420b53091ee784d7891fb62d48e2f5a225b4dbf8)
Diffstat (limited to 'source4/libcli')
-rw-r--r--source4/libcli/composite/loadfile.c21
-rw-r--r--source4/libcli/composite/savefile.c21
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);
}
}