aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2006-05-31 14:13:26 +0000
committerMartin Willi <martin@strongswan.org>2006-05-31 14:13:26 +0000
commit6f2aba1322ce0061c56b9faeb979c236da926c3f (patch)
treeed52da4e0e6af2d0653dbc52378aecefe652fa07
parent3b8af2ab60c21584224e0270e21c227aa66aea1a (diff)
downloadstrongswan-6f2aba1322ce0061c56b9faeb979c236da926c3f.tar.bz2
strongswan-6f2aba1322ce0061c56b9faeb979c236da926c3f.tar.xz
- fixed some memleaks/freebugs
- leak detective works almost usable now (?!)
-rw-r--r--src/charon/config/policies/policy.c1
-rw-r--r--src/charon/network/socket.c13
-rw-r--r--src/charon/sa/authenticator.c1
3 files changed, 6 insertions, 9 deletions
diff --git a/src/charon/config/policies/policy.c b/src/charon/config/policies/policy.c
index 14ca50365..94a6dea83 100644
--- a/src/charon/config/policies/policy.c
+++ b/src/charon/config/policies/policy.c
@@ -330,7 +330,6 @@ static policy_t *clone(private_policy_t *this)
}
iterator->destroy(iterator);
- clone->name = strdup(this->name);
return &clone->public;
}
diff --git a/src/charon/network/socket.c b/src/charon/network/socket.c
index 89f67c964..ba01702cb 100644
--- a/src/charon/network/socket.c
+++ b/src/charon/network/socket.c
@@ -137,7 +137,7 @@ static status_t receiver(private_socket_t *this, packet_t **packet)
{
char buffer[MAX_PACKET];
chunk_t data;
- packet_t *pkt = packet_create();
+ packet_t *pkt;
host_t *source, *dest;
int bytes_read = 0;
@@ -164,16 +164,12 @@ static status_t receiver(private_socket_t *this, packet_t **packet)
}
iterator->destroy(iterator);
- /* add packet destroy handler for cancellation, enable cancellation */
- pthread_cleanup_push((void(*)(void*))pkt->destroy, (void*)pkt);
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldstate);
-
this->logger->log(this->logger, CONTROL|LEVEL1, "waiting on sockets");
- bytes_read = select(max_fd, &readfds, NULL, NULL, NULL);
- /* reset cancellation, remove packet destroy handler (without executing) */
+ /* allow cancellation while select()-ing */
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldstate);
+ bytes_read = select(max_fd, &readfds, NULL, NULL, NULL);
pthread_setcancelstate(oldstate, NULL);
- pthread_cleanup_pop(0);
/* read on the first nonblocking socket */
bytes_read = 0;
@@ -204,6 +200,7 @@ static status_t receiver(private_socket_t *this, packet_t **packet)
u_int16_t dest_port = ntohs(*(u_int16_t*)(buffer + 22));
source = host_create_from_chunk(AF_INET, source_chunk, source_port);
dest = host_create_from_chunk(AF_INET, dest_chunk, dest_port);
+ pkt = packet_create();
pkt->set_source(pkt, source);
pkt->set_destination(pkt, dest);
break;
diff --git a/src/charon/sa/authenticator.c b/src/charon/sa/authenticator.c
index 52bd256f3..81dee0b0d 100644
--- a/src/charon/sa/authenticator.c
+++ b/src/charon/sa/authenticator.c
@@ -356,6 +356,7 @@ static status_t compute_auth_data (private_authenticator_t *this,
this->logger->log(this->logger, CONTROL, "looking for private key with keyid %s", buf);
my_key = charon->credentials->get_rsa_private_key(charon->credentials, my_pubkey);
+ my_pubkey->destroy(my_pubkey);
if (my_key == NULL)
{
char buf[BUF_LEN];