You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sys-cluster/keepalived/files/keepalived-2.0.10-snmp-cras...

123 lines
3.8 KiB

diff --git a/keepalived/check/check_snmp.c b/keepalived/check/check_snmp.c
index 67ae0e4f9..95c6e6f83 100644
--- a/keepalived/check/check_snmp.c
+++ b/keepalived/check/check_snmp.c
@@ -1451,6 +1451,9 @@ static struct variable8 check_vars[] = {
void
check_snmp_agent_init(const char *snmp_socket)
{
+ if (snmp_running)
+ return;
+
/* We handle the global oid if we are running SNMP */
snmp_agent_init(snmp_socket, true);
snmp_register_mib(check_oid, OID_LENGTH(check_oid), "Healthchecker",
@@ -1462,6 +1465,9 @@ check_snmp_agent_init(const char *snmp_socket)
void
check_snmp_agent_close()
{
+ if (!snmp_running)
+ return;
+
snmp_unregister_mib(check_oid, OID_LENGTH(check_oid));
snmp_agent_close(true);
}
diff --git a/keepalived/core/snmp.c b/keepalived/core/snmp.c
index a9472feae..eb5bed20a 100644
--- a/keepalived/core/snmp.c
+++ b/keepalived/core/snmp.c
@@ -325,6 +325,9 @@ snmp_unregister_mib(oid *myoid, size_t len)
void
snmp_agent_init(const char *snmp_socket, bool base_mib)
{
+ if (snmp_running)
+ return;
+
log_message(LOG_INFO, "Starting SNMP subagent");
netsnmp_enable_subagent();
snmp_disable_log();
@@ -378,6 +381,9 @@ snmp_agent_init(const char *snmp_socket, bool base_mib)
void
snmp_agent_close(bool base_mib)
{
+ if (!snmp_running)
+ return;
+
if (base_mib)
snmp_unregister_mib(global_oid, OID_LENGTH(global_oid));
snmp_shutdown(global_name);
diff --git a/keepalived/vrrp/vrrp_snmp.c b/keepalived/vrrp/vrrp_snmp.c
index ca9d46768..db696159c 100644
--- a/keepalived/vrrp/vrrp_snmp.c
+++ b/keepalived/vrrp/vrrp_snmp.c
@@ -4552,6 +4552,9 @@ vrrp_handles_global_oid(void)
void
vrrp_snmp_agent_init(const char *snmp_socket)
{
+ if (snmp_running)
+ return;
+
/* We let the check process handle the global OID if it is running and with snmp */
snmp_agent_init(snmp_socket, vrrp_handles_global_oid());
@@ -4581,6 +4584,9 @@ vrrp_snmp_agent_init(const char *snmp_socket)
void
vrrp_snmp_agent_close(void)
{
+ if (!snmp_running)
+ return;
+
#ifdef _WITH_SNMP_VRRP_
if (global_data->enable_snmp_vrrp)
snmp_unregister_mib(vrrp_oid, OID_LENGTH(vrrp_oid));
diff --git a/lib/scheduler.c b/lib/scheduler.c
index 0a1c334c3..9090a7f88 100644
--- a/lib/scheduler.c
+++ b/lib/scheduler.c
@@ -1630,7 +1630,7 @@ thread_fetch_next_queue(thread_master_t *m)
if (!ev->read) {
log_message(LOG_INFO, "scheduler: No read thread bound on fd:%d (fl:0x%.4X)"
, ev->fd, ep_ev->events);
- assert(0);
+ continue;
}
thread_move_ready(m, &m->read, ev->read, THREAD_READY_FD);
ev->read = NULL;
@@ -1641,7 +1641,7 @@ thread_fetch_next_queue(thread_master_t *m)
if (!ev->write) {
log_message(LOG_INFO, "scheduler: No write thread bound on fd:%d (fl:0x%.4X)"
, ev->fd, ep_ev->events);
- assert(0);
+ continue;
}
thread_move_ready(m, &m->write, ev->write, THREAD_READY_FD);
ev->write = NULL;
@@ -1710,7 +1710,12 @@ process_threads(thread_master_t *m)
thread = thread_trim_head(thread_list);
if (!shutting_down ||
(thread->type == THREAD_READY_FD &&
- (thread->u.fd == m->timer_fd || thread->u.fd == m->signal_fd)) ||
+ (thread->u.fd == m->timer_fd ||
+ thread->u.fd == m->signal_fd
+#ifdef _WITH_SNMP_
+ || FD_ISSET(thread->u.fd, &m->snmp_fdset)
+#endif
+ )) ||
thread->type == THREAD_CHILD ||
thread->type == THREAD_CHILD_TIMEOUT ||
thread->type == THREAD_CHILD_TERMINATED ||
diff --git a/lib/utils.c b/lib/utils.c
index 6f9ec254d..e5b82b524 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -789,7 +789,9 @@ FILE *fopen_safe(const char *path, const char *mode)
{
int fd;
FILE *file;
+#ifdef ENABLE_LOG_FILE_APPEND
int flags = O_NOFOLLOW | O_CREAT | O_CLOEXEC;
+#endif
int sav_errno;
char file_tmp_name[] = "/tmp/keepalivedXXXXXX";