projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
powerdns plugin: Fix memory leak.
[collectd.git]
/
src
/
tcpconns.c
diff --git
a/src/tcpconns.c
b/src/tcpconns.c
index
4d90c41
..
f4c61d5
100644
(file)
--- a/
src/tcpconns.c
+++ b/
src/tcpconns.c
@@
-74,7
+74,9
@@
/* sys/socket.h is necessary to compile when using netlink on older systems. */
# include <sys/socket.h>
# include <linux/netlink.h>
/* sys/socket.h is necessary to compile when using netlink on older systems. */
# include <sys/socket.h>
# include <linux/netlink.h>
+#if HAVE_LINUX_INET_DIAG_H
# include <linux/inet_diag.h>
# include <linux/inet_diag.h>
+#endif
# include <sys/socket.h>
# include <arpa/inet.h>
/* #endif KERNEL_LINUX */
# include <sys/socket.h>
# include <arpa/inet.h>
/* #endif KERNEL_LINUX */
@@
-137,10
+139,12
@@
#endif /* KERNEL_AIX */
#if KERNEL_LINUX
#endif /* KERNEL_AIX */
#if KERNEL_LINUX
+#if HAVE_STRUCT_LINUX_INET_DIAG_REQ
struct nlreq {
struct nlmsghdr nlh;
struct inet_diag_req r;
};
struct nlreq {
struct nlmsghdr nlh;
struct inet_diag_req r;
};
+#endif
static const char *tcp_state[] =
{
static const char *tcp_state[] =
{
@@
-275,9
+279,14
@@
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
static int port_collect_listening = 0;
static port_entry_t *port_list_head = NULL;
static int port_collect_listening = 0;
static port_entry_t *port_list_head = NULL;
+#if KERNEL_LINUX
+#if HAVE_STRUCT_LINUX_INET_DIAG_REQ
+/* This depends on linux inet_diag_req because if this structure is missing,
+ * sequence_number is useless and we get a compilation warning.
+ */
static uint32_t sequence_number = 0;
static uint32_t sequence_number = 0;
+#endif
-#if KERNEL_LINUX
enum
{
SRC_DUNNO,
enum
{
SRC_DUNNO,
@@
-377,18
+386,18
@@
static void conn_reset_port_entry (void)
/* If this entry was created while reading the files (ant not when handling
* the configuration) remove it now. */
if ((pe->flags & (PORT_COLLECT_LOCAL
/* If this entry was created while reading the files (ant not when handling
* the configuration) remove it now. */
if ((pe->flags & (PORT_COLLECT_LOCAL
- | PORT_COLLECT_REMOTE
- | PORT_IS_LISTENING)) == 0)
+
| PORT_COLLECT_REMOTE
+
| PORT_IS_LISTENING)) == 0)
{
port_entry_t *next = pe->next;
DEBUG ("tcpconns plugin: Removing temporary entry "
{
port_entry_t *next = pe->next;
DEBUG ("tcpconns plugin: Removing temporary entry "
- "for listening port %"PRIu16, pe->port);
+
"for listening port %"PRIu16, pe->port);
if (prev == NULL)
if (prev == NULL)
- port_list_head = next;
+
port_list_head = next;
else
else
- prev->next = next;
+
prev->next = next;
sfree (pe);
pe = next;
sfree (pe);
pe = next;
@@
-400,6
+409,7
@@
static void conn_reset_port_entry (void)
memset (pe->count_remote, '\0', sizeof (pe->count_remote));
pe->flags &= ~PORT_IS_LISTENING;
memset (pe->count_remote, '\0', sizeof (pe->count_remote));
pe->flags &= ~PORT_IS_LISTENING;
+ prev = pe;
pe = pe->next;
}
} /* void conn_reset_port_entry */
pe = pe->next;
}
} /* void conn_reset_port_entry */
@@
-446,6
+456,7
@@
static int conn_handle_ports (uint16_t port_local, uint16_t port_remote, uint8_t
* zero on other errors. */
static int conn_read_netlink (void)
{
* zero on other errors. */
static int conn_read_netlink (void)
{
+#if HAVE_STRUCT_LINUX_INET_DIAG_REQ
int fd;
struct sockaddr_nl nladdr;
struct nlreq req;
int fd;
struct sockaddr_nl nladdr;
struct nlreq req;
@@
-574,6
+585,9
@@
static int conn_read_netlink (void)
/* Not reached because the while() loop above handles the exit condition. */
return (0);
/* Not reached because the while() loop above handles the exit condition. */
return (0);
+#else
+ return (1);
+#endif /* HAVE_STRUCT_LINUX_INET_DIAG_REQ */
} /* int conn_read_netlink */
static int conn_handle_line (char *buffer)
} /* int conn_read_netlink */
static int conn_handle_line (char *buffer)