mirror of
https://github.com/samba-team/samba.git
synced 2025-01-18 06:04:06 +03:00
ctdb-client: Factor out function ctdb_client_wait_func_timeout()
Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
This commit is contained in:
parent
403db5b528
commit
01a8d1a4a4
@ -170,6 +170,28 @@ uint32_t ctdb_client_pnn(struct ctdb_client_context *client);
|
|||||||
*/
|
*/
|
||||||
void ctdb_client_wait(struct tevent_context *ev, bool *done);
|
void ctdb_client_wait(struct tevent_context *ev, bool *done);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Client event loop waiting for function to return true with timeout
|
||||||
|
*
|
||||||
|
* This can be used to wait for asynchronous computations to complete.
|
||||||
|
* When this function is called, it will run tevent event loop and wait
|
||||||
|
* till the done function returns true or if the timeout occurs.
|
||||||
|
*
|
||||||
|
* This function will return when either
|
||||||
|
* - done function returns true, or
|
||||||
|
* - timeout has occurred.
|
||||||
|
*
|
||||||
|
* @param[in] ev Tevent context
|
||||||
|
* @param[in] done_func Function flag to indicate when to stop waiting
|
||||||
|
* @param[in] private_data Passed to done function
|
||||||
|
* @param[in] timeout How long to wait
|
||||||
|
* @return 0 on success, ETIMEDOUT on timeout, and errno on failure
|
||||||
|
*/
|
||||||
|
int ctdb_client_wait_func_timeout(struct tevent_context *ev,
|
||||||
|
bool (*done_func)(void *private_data),
|
||||||
|
void *private_data,
|
||||||
|
struct timeval timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Client event loop waiting for a flag with timeout
|
* @brief Client event loop waiting for a flag with timeout
|
||||||
*
|
*
|
||||||
|
@ -336,8 +336,10 @@ static void ctdb_client_wait_timeout_handler(struct tevent_context *ev,
|
|||||||
*timed_out = true;
|
*timed_out = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ctdb_client_wait_timeout(struct tevent_context *ev, bool *done,
|
int ctdb_client_wait_func_timeout(struct tevent_context *ev,
|
||||||
struct timeval timeout)
|
bool (*done_func)(void *private_data),
|
||||||
|
void *private_data,
|
||||||
|
struct timeval timeout)
|
||||||
{
|
{
|
||||||
TALLOC_CTX *mem_ctx;
|
TALLOC_CTX *mem_ctx;
|
||||||
struct tevent_timer *timer;
|
struct tevent_timer *timer;
|
||||||
@ -356,7 +358,7 @@ int ctdb_client_wait_timeout(struct tevent_context *ev, bool *done,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (! (*done) && ! timed_out) {
|
while (! (done_func(private_data)) && ! timed_out) {
|
||||||
tevent_loop_once(ev);
|
tevent_loop_once(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,6 +371,28 @@ int ctdb_client_wait_timeout(struct tevent_context *ev, bool *done,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool client_wait_done(void *private_data)
|
||||||
|
{
|
||||||
|
bool *done = (bool *)private_data;
|
||||||
|
|
||||||
|
return *done;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ctdb_client_wait_timeout(struct tevent_context *ev,
|
||||||
|
bool *done,
|
||||||
|
struct timeval timeout)
|
||||||
|
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = ctdb_client_wait_func_timeout(ev,
|
||||||
|
client_wait_done,
|
||||||
|
done,
|
||||||
|
timeout);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
struct ctdb_recovery_wait_state {
|
struct ctdb_recovery_wait_state {
|
||||||
struct tevent_context *ev;
|
struct tevent_context *ev;
|
||||||
struct ctdb_client_context *client;
|
struct ctdb_client_context *client;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user