diff options
author | Martin Willi <martin@strongswan.org> | 2006-05-31 14:13:26 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2006-05-31 14:13:26 +0000 |
commit | 6f2aba1322ce0061c56b9faeb979c236da926c3f (patch) | |
tree | ed52da4e0e6af2d0653dbc52378aecefe652fa07 | |
parent | 3b8af2ab60c21584224e0270e21c227aa66aea1a (diff) | |
download | strongswan-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.c | 1 | ||||
-rw-r--r-- | src/charon/network/socket.c | 13 | ||||
-rw-r--r-- | src/charon/sa/authenticator.c | 1 |
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]; |