diff options
author | bubulle <bubulle@alioth.debian.org> | 2008-11-01 11:09:46 +0000 |
---|---|---|
committer | bubulle <bubulle@alioth.debian.org> | 2008-11-01 11:09:46 +0000 |
commit | a2b71a0141763c20552bb45eeb4cb78c4b513118 (patch) | |
tree | 85b64d98387145ea4e00c1b529e1820542a979a3 /source/include/async_req.h | |
parent | 2203bd59918d6d70515f9dad601cb5c0ef098092 (diff) | |
download | samba-a2b71a0141763c20552bb45eeb4cb78c4b513118.tar.gz |
Revert the merge of 3.3.0~pre2 in upstream branch
git-svn-id: svn://svn.debian.org/svn/pkg-samba/branches/samba/upstream@2200 fc4039ab-9d04-0410-8cac-899223bdd6b0
Diffstat (limited to 'source/include/async_req.h')
-rw-r--r-- | source/include/async_req.h | 123 |
1 files changed, 41 insertions, 82 deletions
diff --git a/source/include/async_req.h b/source/include/async_req.h index 2d01b53814..fb463d5b9a 100644 --- a/source/include/async_req.h +++ b/source/include/async_req.h @@ -22,116 +22,75 @@ #include "includes.h" -/** - * An async request moves between the following 4 states: +/* + * An async request moves between the following 4 states. */ - enum async_req_state { - /** - * we are creating the request - */ - ASYNC_REQ_INIT, - /** - * we are waiting the request to complete - */ - ASYNC_REQ_IN_PROGRESS, - /** - * the request is finished - */ - ASYNC_REQ_DONE, - /** - * an error has occured - */ - ASYNC_REQ_ERROR -}; - -/** - * @brief An async request - * - * This represents an async request being processed by callbacks via an event - * context. A user can issue for example a write request to a socket, giving - * an implementation function the fd, the buffer and the number of bytes to - * transfer. The function issuing the request will immediately return without - * blocking most likely without having sent anything. The API user then fills - * in req->async.fn and req->async.priv, functions that are called when the - * request is finished. - * - * It is up to the user of the async request to talloc_free it after it has - * finished. This can happen while the completion function is called. - */ + ASYNC_REQ_INIT, /* we are creating the request */ + ASYNC_REQ_IN_PROGRESS, /* we are waiting the request to complete */ + ASYNC_REQ_DONE, /* the request is finished */ + ASYNC_REQ_ERROR }; /* an error has occured */ struct async_req { - /** - * @brief The external state - will be queried by the caller - * - * While the async request is being processed, state will remain in - * ASYNC_REQ_IN_PROGRESS. A request is finished if - * req->state>=ASYNC_REQ_DONE. - */ + /* the external state - will be queried by the caller */ enum async_req_state state; - /** - * @brief Private pointer for the actual implementation - * - * The implementation doing the work for the async request needs a - * current state like for example a fd event. The user of an async - * request should not touch this. - */ + /* a private pointer for use by the async function implementation */ void *private_data; - /** - * @brief Print yourself, for debugging purposes - * - * Async requests are opaque data structures. The implementation of an - * async request can define a custom function to print more debug - * info. - */ + /* print yourself, for debugging purposes */ char *(*print)(TALLOC_CTX *mem_ctx, struct async_req *); - /** - * @brief status code when finished - * - * This status can be queried in the async completion function. It - * will be set to NT_STATUS_OK when everything went fine. - **/ + /* status code when finished */ NTSTATUS status; - /** - * @brief The event context we are using - * - * The event context that this async request works on. - */ + /* the event context we are using */ struct event_context *event_ctx; - /** - * @brief What to do on completion - * - * This is used for the user of an async request, fn is called when - * the request completes, either successfully or with an error. - */ + /* information on what to do on completion */ struct { - /** - * @brief Completion function - * Completion function, to be filled by the API user - */ void (*fn)(struct async_req *); - /** - * @brief Private data for the completion function - */ void *priv; } async; }; -struct async_req *async_req_new(TALLOC_CTX *mem_ctx, struct event_context *ev); - +/* + * Print an async_req structure for debugging purposes + */ char *async_req_print(TALLOC_CTX *mem_ctx, struct async_req *req); +/* + * Create an async request + */ +struct async_req *async_req_new(TALLOC_CTX *mem_ctx, struct event_context *ev); + +/* + * An async request has successfully finished, invoke the callback + */ void async_req_done(struct async_req *req); +/* + * An async request has seen an error, invoke the callback + */ void async_req_error(struct async_req *req, NTSTATUS status); +/* + * If a request is finished or ends in error even before it has the chance to + * trigger the event loop, post a status. This creates an immediate timed + * event to call the async function if there is any. + */ bool async_post_status(struct async_req *req, NTSTATUS status); +/* + * Convenience helper to easily check alloc failure within a callback. + * + * Call pattern would be + * p = talloc(mem_ctx, bla); + * if (async_req_nomem(p, req)) { + * return; + * } + * + */ bool async_req_nomem(const void *p, struct async_req *req); #endif |