summaryrefslogtreecommitdiff
path: root/platform/src/key_keeper.cpp
diff options
context:
space:
mode:
author崔一鸣 <[email protected]>2018-09-14 16:58:19 +0800
committerzhengchao <[email protected]>2018-09-14 17:30:14 +0800
commiteb756779b3ff8f22f6ea759d08d2ec1eaa43e3f5 (patch)
tree5d2496c68df5d3a5a338dd666bbf28864b8eac39 /platform/src/key_keeper.cpp
parentaa4d83e46463d33b7c8b5c465e5900a6dedeb967 (diff)
fix bugs
Diffstat (limited to 'platform/src/key_keeper.cpp')
-rw-r--r--platform/src/key_keeper.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/platform/src/key_keeper.cpp b/platform/src/key_keeper.cpp
index 1124c1d..a8612ac 100644
--- a/platform/src/key_keeper.cpp
+++ b/platform/src/key_keeper.cpp
@@ -234,7 +234,7 @@ static void err_out(X509* cert, EVP_PKEY* key, STACK_OF(X509)* chain)
return;
}
-static struct keyring* get_keyring_from_response(const char* data)
+static struct keyring_private* get_keyring_from_response(const char* data)
{
X509* cert = NULL;
EVP_PKEY* key = NULL;
@@ -300,7 +300,7 @@ static struct keyring* get_keyring_from_response(const char* data)
X509_free(cert);
EVP_PKEY_free(key);
sk_X509_pop_free(chain, X509_free);
- return &(_kyr->head);
+ return _kyr;
}
static long keyring_local_cache_query_cb(void * data, const uchar * key, uint size, void * user_arg)
@@ -356,13 +356,15 @@ static void certstore_rpc_on_succ(void* result, void* user)
if(status_code == HTTP_OK)
{
*(data+len) = '\0';
- struct keyring* kyr= get_keyring_from_response(data);
- promise_success(p, (void*)kyr);
+ struct keyring_private* kyr= get_keyring_from_response(data);
+ keyring_ref_inc(kyr);
int ret = MESA_htable_add(htable, key, key_len, (void*)kyr);
if(ret<0)
{
key_keeper_free_keyring((struct keyring*)kyr);
}
+ promise_success(p, (void*)kyr);
+ key_keeper_free_keyring((struct keyring*)kyr);
}
else
{
@@ -516,15 +518,17 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c
{
filename = keeper->untrusted_ca_path;
}
- struct keyring_private* ring = generate_x509_keyring(origin_cert, keyring_id, filename);
- if(ring)
+ struct keyring_private* kyr = generate_x509_keyring(origin_cert, keyring_id, filename);
+ if(kyr)
{
- promise_success(p, (void*)ring);
- int ret = MESA_htable_add(ctx->htable, ctx->key, ctx->key_len, (void*)ring);
- if(ret<0)
+ keyring_ref_inc(kyr);
+ int ret = MESA_htable_add(ctx->htable, ctx->key, ctx->key_len, (void*)kyr);
+ if(ret < 0)
{
- key_keeper_free_keyring((struct keyring*)ring);
+ key_keeper_free_keyring((struct keyring*)kyr);
}
+ promise_success(p, (void*)kyr);
+ key_keeper_free_keyring((struct keyring*)kyr);
}
else
{