FEATURE on session activity update all user sessions
diff --git a/src/mod_netconf.c b/src/mod_netconf.c
index 250164e..e40481e 100644
--- a/src/mod_netconf.c
+++ b/src/mod_netconf.c
@@ -363,6 +363,18 @@
}
static void
+session_user_activity(const char *username)
+{
+ struct session_with_mutex *sess;
+
+ for (sess = netconf_sessions_list; sess; sess = sess->next) {
+ if (!strcmp(nc_session_get_user(sess->session), username)) {
+ sess->last_activity = time(NULL);
+ }
+ }
+}
+
+static void
session_unlock(struct session_with_mutex *locked_session)
{
DEBUG("UNLOCK mutex %s", __func__);
@@ -1357,7 +1369,6 @@
return 0;
}
locked_session->session = session;
- locked_session->last_activity = time(NULL);
locked_session->hello_message = NULL;
locked_session->closed = 0;
pthread_mutex_init(&locked_session->lock, NULL);
@@ -1379,7 +1390,7 @@
last_session->next = locked_session;
locked_session->prev = last_session;
}
- DEBUG("Before session_unlock");
+ session_user_activity(nc_session_get_user(locked_session->session));
/* no need to lock session, noone can read it while we have wrlock */
@@ -1403,6 +1414,7 @@
session_key_generator = 1;
}
+ DEBUG("Before session_unlock");
/* unlock session list */
DEBUG("UNLOCK wrlock %s", __func__);
if (pthread_rwlock_unlock(&session_lock) != 0) {
@@ -1640,7 +1652,7 @@
goto finished;
}
- locked_session->last_activity = time(NULL);
+ session_user_activity(nc_session_get_user(locked_session->session));
/* send the request and get the reply */
msgt = netconf_send_recv_timed(locked_session->session, rpc, 2000000, &reply);
@@ -2258,7 +2270,7 @@
goto finish;
}
- locked_session->last_activity = time(NULL);
+ session_user_activity(nc_session_get_user(locked_session->session));
if (filter[0] == '/') {
node = ly_ctx_get_node(locked_session->ctx, filter);
@@ -2315,7 +2327,7 @@
goto finish;
}
- locked_session->last_activity = time(NULL);
+ session_user_activity(nc_session_get_user(locked_session->session));
data_tree = lyd_parse(locked_session->ctx, config, LYD_JSON, LYD_OPT_STRICT);
if (!data_tree) {