diff options
Diffstat (limited to 'cli/src/cli-cmd.c')
-rw-r--r-- | cli/src/cli-cmd.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c index 4ef8e86cd..043cb91d7 100644 --- a/cli/src/cli-cmd.c +++ b/cli/src/cli-cmd.c @@ -37,6 +37,11 @@ static int cmd_done; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static pthread_mutex_t cond_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t conn = PTHREAD_COND_INITIALIZER; +static pthread_mutex_t conn_mutex = PTHREAD_MUTEX_INITIALIZER; + +int cli_op_ret = 0; +int connected = 1; int cli_cmd_process (struct cli_state *state, int argc, char **argv) @@ -178,6 +183,7 @@ cli_cmd_await_response () pthread_mutex_lock (&cond_mutex); { + cli_op_ret = 0; while (!cmd_done) { pthread_cond_wait (&cond, &cond_mutex); } @@ -187,15 +193,16 @@ cli_cmd_await_response () pthread_mutex_destroy (&cond_mutex); pthread_cond_destroy (&cond); - return 0; + return cli_op_ret; } int -cli_cmd_broadcast_response () +cli_cmd_broadcast_response (int32_t status) { pthread_mutex_lock (&cond_mutex); { cmd_done = 1; + cli_op_ret = status; pthread_cond_broadcast (&cond); } @@ -204,3 +211,37 @@ cli_cmd_broadcast_response () return 0; } +int32_t +cli_cmd_await_connected () +{ + pthread_mutex_init (&conn_mutex, NULL); + pthread_cond_init (&conn, NULL); + + pthread_mutex_lock (&conn_mutex); + { + while (!connected) { + pthread_cond_wait (&conn, &conn_mutex); + } + } + pthread_mutex_unlock (&conn_mutex); + + pthread_mutex_destroy (&conn_mutex); + pthread_cond_destroy (&conn); + + return 0; +} + +int32_t +cli_cmd_broadcast_connected () +{ + connected = 1; + gf_log ("", GF_LOG_NORMAL, "Connected"); + pthread_mutex_lock (&conn_mutex); + { + pthread_cond_broadcast (&conn); + } + + pthread_mutex_unlock (&conn_mutex); + + return 0; +} |