@@ -3236,11 +3236,11 @@ nc_server_ch_client_set_max_attempts(const char *client_name, uint8_t max_attemp
32363236
32373237/* client lock is expected to be held */
32383238static NC_MSG_TYPE
3239- nc_connect_ch_endpt (struct nc_ch_endpt * endpt , nc_server_ch_session_acquire_ctx_cb acquire_ctx_cb , void * ctx_cb_data ,
3240- struct nc_session * * session )
3239+ nc_connect_ch_endpt (struct nc_ch_endpt * endpt , nc_server_ch_session_acquire_ctx_cb acquire_ctx_cb ,
3240+ nc_server_ch_session_release_ctx_cb release_ctx_cb , void * ctx_cb_data , struct nc_session * * session )
32413241{
32423242 NC_MSG_TYPE msgtype ;
3243- const struct ly_ctx * ctx ;
3243+ const struct ly_ctx * ctx = NULL ;
32443244 int sock , ret ;
32453245 struct timespec ts_cur ;
32463246 char * ip_host ;
@@ -3342,6 +3342,9 @@ nc_connect_ch_endpt(struct nc_ch_endpt *endpt, nc_server_ch_session_acquire_ctx_
33423342fail :
33433343 nc_session_free (* session , NULL );
33443344 * session = NULL ;
3345+ if (ctx ) {
3346+ release_ctx_cb (ctx_cb_data );
3347+ }
33453348 return msgtype ;
33463349}
33473350
@@ -3399,8 +3402,10 @@ nc_server_ch_client_thread_session_cond_wait(struct nc_session *session, struct
33993402 /* CH UNLOCK */
34003403 pthread_mutex_unlock (& session -> opts .server .ch_lock );
34013404
3405+ /* session terminated, release its context */
34023406 nc_session_free (session , NULL );
3403- goto release_ctx ;
3407+ data -> release_ctx_cb (data -> ctx_cb_data );
3408+ return ret ;
34043409 }
34053410
34063411 do {
@@ -3456,10 +3461,6 @@ nc_server_ch_client_thread_session_cond_wait(struct nc_session *session, struct
34563461 /* CH UNLOCK */
34573462 pthread_mutex_unlock (& session -> opts .server .ch_lock );
34583463
3459- release_ctx :
3460- /* session terminated, release its context */
3461- data -> release_ctx_cb (data -> ctx_cb_data );
3462-
34633464 return ret ;
34643465}
34653466
@@ -3489,7 +3490,7 @@ nc_ch_client_thread(void *arg)
34893490
34903491 VRB (NULL , "Call Home client \"%s\" connecting..." , data -> client_name );
34913492 while (1 ) {
3492- msgtype = nc_connect_ch_endpt (cur_endpt , data -> acquire_ctx_cb , data -> ctx_cb_data , & session );
3493+ msgtype = nc_connect_ch_endpt (cur_endpt , data -> acquire_ctx_cb , data -> release_ctx_cb , data -> ctx_cb_data , & session );
34933494
34943495 if (msgtype == NC_MSG_HELLO ) {
34953496 /* UNLOCK */
0 commit comments