diff options
author | Mauro Sardara <msardara@cisco.com> | 2020-11-20 21:47:23 +0000 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2020-11-20 21:47:23 +0000 |
commit | fce46803b69bc8d881f1438cb8bd38514e5e42e3 (patch) | |
tree | 7462a38ac652b691aba7cb5a810c7f92c30bd12b | |
parent | 9f0080e53da7ad68f501ac28b1ff26da8b95ed75 (diff) |
[HICN-658] Fix vapi_connect_safe.
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Change-Id: Icd8d0f0da817e617a2a8b85788d6a648083f35af
-rw-r--r-- | hicn-plugin/vapi/vapi_safe.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/hicn-plugin/vapi/vapi_safe.c b/hicn-plugin/vapi/vapi_safe.c index bd9cfe61c..e9353497f 100644 --- a/hicn-plugin/vapi/vapi_safe.c +++ b/hicn-plugin/vapi/vapi_safe.c @@ -7,21 +7,21 @@ #define RESPONSE_QUEUE_SIZE 2 pthread_mutex_t *mutex = NULL; +vapi_ctx_t g_vapi_ctx_instance = NULL; u32 count = 0; int lock = 0; vapi_error_e vapi_connect_safe(vapi_ctx_t *vapi_ctx_ret, int async) { - vapi_error_e rv = VAPI_OK; - vapi_ctx_t g_vapi_ctx_instance = NULL; + vapi_error_e rv = VAPI_OK; while (!__sync_bool_compare_and_swap(&lock, 0, 1)); - rv = vapi_ctx_alloc(&g_vapi_ctx_instance); - if (rv != VAPI_OK) - goto err; - - if (!mutex) + if (!g_vapi_ctx_instance && !mutex) { + rv = vapi_ctx_alloc(&g_vapi_ctx_instance); + if (rv != VAPI_OK) + goto err; + mutex = malloc(sizeof(pthread_mutex_t)); if (!mutex) goto err_mutex_alloc; @@ -39,7 +39,7 @@ vapi_error_e vapi_connect_safe(vapi_ctx_t *vapi_ctx_ret, int async) { async ? VAPI_MODE_NONBLOCKING : VAPI_MODE_BLOCKING, true); if (rv != VAPI_OK) - goto err_vapi; + goto err; count++; } @@ -52,8 +52,6 @@ vapi_error_e vapi_connect_safe(vapi_ctx_t *vapi_ctx_ret, int async) { err_mutex_init: free(mutex); err_mutex_alloc: - err_vapi: - vapi_ctx_free(g_vapi_ctx_instance); err: while (!__sync_bool_compare_and_swap(&lock, 1, 0)); return VAPI_ENOMEM; |