diff options
Diffstat (limited to 'cli/src/cli-cmd.c')
-rw-r--r-- | cli/src/cli-cmd.c | 65 |
1 files changed, 51 insertions, 14 deletions
diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index c88d3fe8505..ee30ea996e6 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -175,23 +175,41 @@ out: } int -cli_cmd_await_response () +cli_cmd_cond_init () { + pthread_mutex_init (&cond_mutex, NULL); pthread_cond_init (&cond, NULL); - cmd_done = 0; + pthread_mutex_init (&conn_mutex, NULL); + pthread_cond_init (&conn, NULL); + + return 0; +} + +int +cli_cmd_lock () +{ pthread_mutex_lock (&cond_mutex); - { - cli_op_ret = 0; - while (!cmd_done) { - pthread_cond_wait (&cond, &cond_mutex); - } - } + return 0; +} + +int +cli_cmd_unlock () +{ pthread_mutex_unlock (&cond_mutex); + return 0; +} + +int +cli_cmd_await_response () +{ - pthread_mutex_destroy (&cond_mutex); - pthread_cond_destroy (&cond); + cmd_done = 0; + while (!cmd_done) + pthread_cond_wait (&cond, &cond_mutex); + + cli_cmd_unlock (); return cli_op_ret; } @@ -214,8 +232,6 @@ cli_cmd_broadcast_response (int32_t status) int32_t cli_cmd_await_connected () { - pthread_mutex_init (&conn_mutex, NULL); - pthread_cond_init (&conn, NULL); pthread_mutex_lock (&conn_mutex); { @@ -225,8 +241,6 @@ cli_cmd_await_connected () } pthread_mutex_unlock (&conn_mutex); - pthread_mutex_destroy (&conn_mutex); - pthread_cond_destroy (&conn); return 0; } @@ -245,3 +259,26 @@ cli_cmd_broadcast_connected () return 0; } + +int +cli_cmd_submit (void *req, call_frame_t *frame, + rpc_clnt_prog_t *prog, + int procnum, struct iobref *iobref, + cli_serialize_t sfunc, xlator_t *this, + fop_cbk_fn_t cbkfn) +{ + int ret = -1; + + cli_cmd_lock (); + ret = cli_submit_request (req, frame, prog, + procnum, NULL, sfunc, + this, cbkfn); + + if (!ret) + ret = cli_cmd_await_response (); + else + cli_cmd_unlock (); + + gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); + return ret; +} |