From 95e3c0a3567560f8de115f81e5e779c5970ba45f Mon Sep 17 00:00:00 2001 From: Adam Holmberg Date: Wed, 2 Mar 2016 15:26:23 -0600 Subject: [PATCH] Fix callback example - Don't connect_keyspace (in case it's not there) - Fix exit handling for failed session connect --- examples/callbacks/callbacks.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/examples/callbacks/callbacks.c b/examples/callbacks/callbacks.c index 55995a4e1..66fa72aa3 100644 --- a/examples/callbacks/callbacks.c +++ b/examples/callbacks/callbacks.c @@ -36,26 +36,33 @@ uv_mutex_t mutex; uv_cond_t cond; +int exit_flag = 0; CassFuture* close_future = NULL; CassUuidGen* uuid_gen = NULL; void wait_exit() { uv_mutex_lock(&mutex); - while (close_future == NULL) { + while (exit_flag == 0) { uv_cond_wait(&cond, &mutex); } uv_mutex_unlock(&mutex); - cass_future_wait(close_future); - cass_future_free(close_future); + if (close_future) { + cass_future_wait(close_future); + cass_future_free(close_future); + } } void signal_exit(CassSession* session) { uv_mutex_lock(&mutex); - close_future = cass_session_close(session); + if (session) { + close_future = cass_session_close(session); + } + exit_flag = 1; uv_cond_signal(&cond); uv_mutex_unlock(&mutex); } +void on_set_keyspace(CassFuture* future, void* data); void on_create_keyspace(CassFuture* future, void* data); void on_create_table(CassFuture* future, void* data); @@ -79,7 +86,7 @@ CassCluster* create_cluster() { } void connect_session(CassSession* session, const CassCluster* cluster, CassFutureCallback callback) { - CassFuture* future = cass_session_connect_keyspace(session, cluster, "examples"); + CassFuture* future = cass_session_connect(session, cluster); cass_future_set_callback(future, callback, session); cass_future_free(future); } @@ -99,7 +106,7 @@ void on_session_connect(CassFuture* future, void* data) { if (code != CASS_OK) { print_error(future); - uv_cond_signal(&cond); + signal_exit(NULL); return; } @@ -115,6 +122,17 @@ void on_create_keyspace(CassFuture* future, void* data) { print_error(future); } + execute_query((CassSession*)data, + "USE examples", + on_set_keyspace); +} + +void on_set_keyspace(CassFuture* future, void* data) { + CassError code = cass_future_error_code(future); + if (code != CASS_OK) { + print_error(future); + } + execute_query((CassSession*)data, "CREATE TABLE callbacks " "(key timeuuid PRIMARY KEY, value bigint)",