diff --git a/libs/libblade/src/blade_stack.c b/libs/libblade/src/blade_stack.c index 1cc86a8861..fb6cc8f28d 100644 --- a/libs/libblade/src/blade_stack.c +++ b/libs/libblade/src/blade_stack.c @@ -1084,7 +1084,7 @@ KS_DECLARE(ks_status_t) blade_protocol_subscribe(blade_handle_t *bh, const char } ks_pool_free(bh->pool, &localid); - if (bsub) { + if (!remove && bsub) { blade_subscription_callback_set(bsub, event_callback); blade_subscription_callback_data_set(bsub, event_data); } diff --git a/libs/libblade/src/blade_transportmgr.c b/libs/libblade/src/blade_transportmgr.c index f03e50f301..a1344084ec 100644 --- a/libs/libblade/src/blade_transportmgr.c +++ b/libs/libblade/src/blade_transportmgr.c @@ -184,7 +184,8 @@ KS_DECLARE(blade_transport_t *) blade_transportmgr_transport_lookup(blade_transp ks_assert(btmgr); - if (name && name[0]) bt = (blade_transport_t *)ks_hash_search(btmgr->transports, (void *)name, KS_READLOCKED); + ks_hash_read_lock(btmgr->transports); + if (name && name[0]) bt = (blade_transport_t *)ks_hash_search(btmgr->transports, (void *)name, KS_UNLOCKED); if (!bt && ordefault) bt = btmgr->default_transport; // @todo if (bt) blade_transport_read_lock(bt); ks_hash_read_unlock(btmgr->transports); diff --git a/libs/libblade/test/testcli.c b/libs/libblade/test/testcli.c index 8e55c7958d..b02a71abfc 100644 --- a/libs/libblade/test/testcli.c +++ b/libs/libblade/test/testcli.c @@ -292,14 +292,19 @@ int main(int argc, char **argv) if (autoconnect) { blade_connection_t *bc = NULL; blade_identity_t *target = NULL; + ks_bool_t connected = KS_FALSE; blade_identity_create(&target, blade_handle_pool_get(bh)); - if (blade_identity_parse(target, autoconnect) == KS_STATUS_SUCCESS) blade_handle_connect(bh, &bc, target, NULL); + if (blade_identity_parse(target, autoconnect) == KS_STATUS_SUCCESS) connected = blade_handle_connect(bh, &bc, target, NULL) == KS_STATUS_SUCCESS; blade_identity_destroy(&target); - ks_sleep_ms(3000); + + if (connected) { + // @todo use session state change callback to know when the session is ready and the realm(s) available from blade.connect + ks_sleep_ms(3000); + } } loop(bh); diff --git a/libs/libblade/test/testcon.c b/libs/libblade/test/testcon.c index e2a51676fe..4e1b854a41 100644 --- a/libs/libblade/test/testcon.c +++ b/libs/libblade/test/testcon.c @@ -73,14 +73,17 @@ ks_status_t testproto_create(testproto_t **testP, blade_handle_t *bh) ks_status_t testproto_destroy(testproto_t **testP) { testproto_t *test = NULL; - //ks_pool_t *pool = NULL; + ks_pool_t *pool = NULL; ks_assert(testP); ks_assert(*testP); test = *testP; + pool = test->pool; - ks_pool_free(test->pool, testP); + ks_pool_close(&pool); + + *testP = NULL; return KS_STATUS_SUCCESS; }