Skip to content

Commit

Permalink
Fix memory leak.
Browse files Browse the repository at this point in the history
  • Loading branch information
Marco van Wieringen committed May 5, 2013
1 parent d8d1063 commit 9f6b0e8
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 10 deletions.
19 changes: 14 additions & 5 deletions src/lib/bnet_server.c
Expand Up @@ -124,7 +124,7 @@ void bnet_thread_server(dlist *addr_list, int max_clients, alist *sockfds,
#ifdef HAVE_LIBWRAP
struct request_info request;
#endif
IPADDR *ipaddr, *next;
IPADDR *ipaddr, *next, *to_free;
s_sockfd *fd_ptr = NULL;
char buf[128];
#ifdef HAVE_POLL
Expand All @@ -137,14 +137,23 @@ void bnet_thread_server(dlist *addr_list, int max_clients, alist *sockfds,
/*
* Remove any duplicate addresses.
*/
for (ipaddr = (IPADDR *)addr_list->first(); ipaddr;
for (ipaddr = (IPADDR *)addr_list->first();
ipaddr;
ipaddr = (IPADDR *)addr_list->next(ipaddr)) {
for (next = (IPADDR *)addr_list->next(ipaddr); next;
next = (IPADDR *)addr_list->next(next)) {
next = (IPADDR *)addr_list->next(ipaddr);
while (next) {
/*
* See if the addresses match.
*/
if (ipaddr->get_sockaddr_len() == next->get_sockaddr_len() &&
memcmp(ipaddr->get_sockaddr(), next->get_sockaddr(),
ipaddr->get_sockaddr_len()) == 0) {
addr_list->remove(next);
to_free = next;
next = (IPADDR *)addr_list->next(next);
addr_list->remove(to_free);
delete to_free;
} else {
next = (IPADDR *)addr_list->next(next);
}
}
}
Expand Down
19 changes: 14 additions & 5 deletions src/lib/bsock.c
Expand Up @@ -192,7 +192,7 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service,
{
int sockfd = -1;
dlist *addr_list;
IPADDR *ipaddr, *next;
IPADDR *ipaddr, *next, *to_free;
bool connected = false;
int turnon = 1;
const char *errstr;
Expand All @@ -216,13 +216,22 @@ bool BSOCK::open(JCR *jcr, const char *name, char *host, char *service,
* Remove any duplicate addresses.
*/
for (ipaddr = (IPADDR *)addr_list->first();
ipaddr; ipaddr = (IPADDR *)addr_list->next(ipaddr)) {
for (next = (IPADDR *)addr_list->next(ipaddr); next;
next = (IPADDR *)addr_list->next(next)) {
ipaddr;
ipaddr = (IPADDR *)addr_list->next(ipaddr)) {
next = (IPADDR *)addr_list->next(ipaddr);
while (next) {
/*
* See if the addresses match.
*/
if (ipaddr->get_sockaddr_len() == next->get_sockaddr_len() &&
memcmp(ipaddr->get_sockaddr(), next->get_sockaddr(),
ipaddr->get_sockaddr_len()) == 0) {
addr_list->remove(next);
to_free = next;
next = (IPADDR *)addr_list->next(next);
addr_list->remove(to_free);
delete to_free;
} else {
next = (IPADDR *)addr_list->next(next);
}
}
}
Expand Down

0 comments on commit 9f6b0e8

Please sign in to comment.