From c2fad1916ad48b53328a989591be56710678801a Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 14 Oct 2010 17:10:13 +0200 Subject: [PATCH] Avoid recursive loop if no socket implementations are loaded. --- src/libcharon/network/receiver.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libcharon/network/receiver.c b/src/libcharon/network/receiver.c index a7eb4246e..d8cebe192 100644 --- a/src/libcharon/network/receiver.c +++ b/src/libcharon/network/receiver.c @@ -274,9 +274,17 @@ static job_requeue_t receive_packets(private_receiver_t *this) { packet_t *packet; message_t *message; + status_t status; /* read in a packet */ - if (charon->socket->receive(charon->socket, &packet) != SUCCESS) + status = charon->socket->receive(charon->socket, &packet); + if (status == NOT_SUPPORTED) + { + /* the processor destroys this job */ + this->job = NULL; + return JOB_REQUEUE_NONE; + } + else if (status != SUCCESS) { DBG2(DBG_NET, "receiving from socket failed!"); return JOB_REQUEUE_FAIR; @@ -368,7 +376,10 @@ static job_requeue_t receive_packets(private_receiver_t *this) METHOD(receiver_t, destroy, void, private_receiver_t *this) { - this->job->cancel(this->job); + if (this->job) + { + this->job->cancel(this->job); + } this->rng->destroy(this->rng); this->hasher->destroy(this->hasher); free(this);