- int rc = sr_rpc_subscribe(current_session, MANUAL_NOTIFICATION_RPC_SCHEMA_XPATH, manual_notification_pm_cb, 0, 0, SR_SUBSCR_CTX_REUSE, &session_subscription);
- if(rc != SR_ERR_OK) {
- log_error("error from sr_rpc_subscribe: %s\n", sr_strerror(rc));
- return NTS_ERR_FAILED;
+ if(manual_notification_subscription == 0) {
+ int rc = sr_rpc_subscribe(current_session, MANUAL_NOTIFICATION_RPC_SCHEMA_XPATH, manual_notification_pm_cb, 0, 0, SR_SUBSCR_CTX_REUSE, &manual_notification_subscription);
+ if(rc != SR_ERR_OK) {
+ log_error("error from sr_rpc_subscribe: %s\n", sr_strerror(rc));
+ return NTS_ERR_FAILED;
+ }
+ }
+
+ return NTS_ERR_OK;
+}
+
+int manual_notification_feature_stop(void) {
+ assert_session();
+
+ if(manual_notification_subscription) {
+ int rc = sr_unsubscribe(manual_notification_subscription);
+ if(rc != SR_ERR_OK) {
+ log_error("error from sr_rpc_subscribe: %s\n", sr_strerror(rc));
+ return NTS_ERR_FAILED;
+ }
+
+ manual_notification_subscription = 0;