Fixed memory errors in backend, cli and streams
This commit is contained in:
parent
fc3f0cbcd9
commit
d24d5f6a9c
6 changed files with 33 additions and 37 deletions
|
|
@ -320,27 +320,22 @@ backend_client_rm(clixon_handle h,
|
|||
struct client_entry **ce_prev;
|
||||
uint32_t myid = ce->ce_id;
|
||||
yang_stmt *yspec;
|
||||
int retval = -1;
|
||||
|
||||
/* If the confirmed-commit feature is enabled, rollback any ephemeral commit originated by this client */
|
||||
if ((yspec = clicon_dbspec_yang(h)) == NULL) {
|
||||
clixon_err(OE_YANG, ENOENT, "No yang spec");
|
||||
goto done;
|
||||
}
|
||||
if (if_feature(yspec, "ietf-netconf", "confirmed-commit")) {
|
||||
if (confirmed_commit_state_get(h) == EPHEMERAL) {
|
||||
/* See if this client is the origin */
|
||||
clixon_debug(CLIXON_DBG_BACKEND, "session_id: %u, confirmed_commit.session_id: %u", ce->ce_id, confirmed_commit_session_id_get(h));
|
||||
|
||||
if (myid == confirmed_commit_session_id_get(h)) {
|
||||
clixon_debug(CLIXON_DBG_BACKEND, "ok, rolling back");
|
||||
clixon_log(h, LOG_NOTICE, "a client with an active ephemeral confirmed-commit has disconnected; rolling back");
|
||||
|
||||
/* do_rollback errors are logged internally and there is no client to report errors to, so errors are
|
||||
* ignored here.
|
||||
*/
|
||||
cancel_rollback_event(h);
|
||||
do_rollback(h, NULL);
|
||||
if ((yspec = clicon_dbspec_yang(h)) != NULL) {
|
||||
if (if_feature(yspec, "ietf-netconf", "confirmed-commit")) {
|
||||
if (confirmed_commit_state_get(h) == EPHEMERAL) {
|
||||
/* See if this client is the origin */
|
||||
clixon_debug(CLIXON_DBG_BACKEND, "session_id: %u, confirmed_commit.session_id: %u", ce->ce_id, confirmed_commit_session_id_get(h));
|
||||
if (myid == confirmed_commit_session_id_get(h)) {
|
||||
clixon_debug(CLIXON_DBG_BACKEND, "ok, rolling back");
|
||||
clixon_log(h, LOG_NOTICE, "a client with an active ephemeral confirmed-commit has disconnected; rolling back");
|
||||
/* do_rollback errors are logged internally and there is no client to report errors to, so errors are
|
||||
* ignored here.
|
||||
*/
|
||||
cancel_rollback_event(h);
|
||||
do_rollback(h, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -363,9 +358,7 @@ backend_client_rm(clixon_handle h,
|
|||
}
|
||||
ce_prev = &c->ce_next;
|
||||
}
|
||||
retval = backend_client_delete(h, ce); /* actually purge it */
|
||||
done:
|
||||
return retval;
|
||||
return backend_client_delete(h, ce); /* actually purge it */
|
||||
}
|
||||
|
||||
/*! Get clixon per datastore stats
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ backend_handle_exit(clixon_handle h)
|
|||
{
|
||||
struct client_entry *ce;
|
||||
|
||||
stream_delete_all(h, 1);
|
||||
/* only delete client structs, not close sockets, etc, see backend_client_rm WHY NOT? */
|
||||
while ((ce = backend_client_list(h)) != NULL){
|
||||
if (ce->ce_s){
|
||||
|
|
|
|||
|
|
@ -1845,8 +1845,11 @@ yang2cli_yspec(clixon_handle h,
|
|||
clixon_err(OE_YANG, errno, "Failing clispec: %s", cbuf_get(cb));
|
||||
goto done;
|
||||
}
|
||||
clixon_debug(CLIXON_DBG_CLI, "Generated auto-cli for module:%s",
|
||||
yang_filename_get(ymod));
|
||||
clixon_debug(CLIXON_DBG_CLI, "%s", cbuf_get(cbname));
|
||||
if (cbname){
|
||||
cbuf_free(cbname);
|
||||
cbname = NULL;
|
||||
}
|
||||
/* Add prefix: assume new are appended */
|
||||
for (i=0; i<pt_len_get(pt); i++){
|
||||
if ((co = pt_vec_i_get(pt, i)) != NULL){
|
||||
|
|
|
|||
|
|
@ -167,7 +167,6 @@ clixon_handle_exit(clixon_handle h)
|
|||
clicon_hash_free(ha);
|
||||
if ((ha = clicon_db_elmnt(h)) != NULL)
|
||||
clicon_hash_free(ha);
|
||||
stream_delete_all(h, 1);
|
||||
free(ch);
|
||||
retval = 0;
|
||||
return retval;
|
||||
|
|
|
|||
|
|
@ -181,8 +181,9 @@ stream_add(clixon_handle h,
|
|||
/*! Delete complete notification event stream list (not just single stream)
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @param[in] force Force deletion of
|
||||
* @retval 0 OK
|
||||
* @param[in] force Also free ss
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
stream_delete_all(clixon_handle h,
|
||||
|
|
@ -395,20 +396,20 @@ stream_ss_add(clixon_handle h,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/*! Delete event stream subscription to a stream given a callback and arg
|
||||
/*! Delete event stream subscription
|
||||
*
|
||||
* @param[in] h Clixon handle
|
||||
* @param[in] stream Name of stream or NULL for all streams
|
||||
* @param[in] fn Callback when event occurs
|
||||
* @param[in] arg Argument to use with callback. Also handle when deleting
|
||||
* @param[in] es Event stream
|
||||
* @param[in] ss Stream subscription
|
||||
* @param[in] force 1: free ss
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error
|
||||
*/
|
||||
int
|
||||
stream_ss_rm(clixon_handle h,
|
||||
event_stream_t *es,
|
||||
struct stream_subscription *ss,
|
||||
int force)
|
||||
stream_ss_rm(clixon_handle h,
|
||||
event_stream_t *es,
|
||||
struct stream_subscription *ss,
|
||||
int force)
|
||||
{
|
||||
clixon_debug(CLIXON_DBG_STREAM, "");
|
||||
DELQ(ss, es->es_subscription, struct stream_subscription *);
|
||||
|
|
|
|||
|
|
@ -960,7 +960,7 @@ yspec_new_shared(clixon_handle h,
|
|||
yang_flag_set(yspec1, YANG_FLAG_SPEC_MOUNT);
|
||||
clixon_debug(CLIXON_DBG_YANG, "new yang-spec: %p", yspec1);
|
||||
}
|
||||
if (yang_cvec_add(yspec1, CGV_STRING, xpath) < 0){
|
||||
if (yang_cvec_add(yspec1, CGV_STRING, xpath) == NULL){
|
||||
yspec1 = NULL;
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1102,7 +1102,6 @@ ys_free1(yang_stmt *ys,
|
|||
free(ys->ys_nscache);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue