aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/networking/streams/stream_service.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-07-02 14:04:51 +0200
committerMartin Willi <martin@revosec.ch>2013-07-18 16:00:29 +0200
commitc9d1742b5da37de26ed622e3b1317572da2f4978 (patch)
treef5aa595af07b1a9c089f15c68e4239308e0c2035 /src/libstrongswan/networking/streams/stream_service.c
parent58d0dadddc44244eb9c5e483cde6641afb54ee49 (diff)
downloadstrongswan-c9d1742b5da37de26ed622e3b1317572da2f4978.tar.bz2
strongswan-c9d1742b5da37de26ed622e3b1317572da2f4978.tar.xz
stream: don't close underlying socket when creating a stream from it
Diffstat (limited to 'src/libstrongswan/networking/streams/stream_service.c')
-rw-r--r--src/libstrongswan/networking/streams/stream_service.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libstrongswan/networking/streams/stream_service.c b/src/libstrongswan/networking/streams/stream_service.c
index 1b06e1eb1..c2681af3a 100644
--- a/src/libstrongswan/networking/streams/stream_service.c
+++ b/src/libstrongswan/networking/streams/stream_service.c
@@ -109,7 +109,10 @@ static void destroy_async_data(async_data_t *data)
this->condvar->signal(this->condvar);
this->mutex->unlock(this->mutex);
- close(data->fd);
+ if (data->fd != -1)
+ {
+ close(data->fd);
+ }
free(data);
}
@@ -123,6 +126,8 @@ static job_requeue_t accept_async(async_data_t *data)
stream = stream_create_from_fd(data->fd);
if (stream)
{
+ /* FD is now owned by stream, don't close it during cleanup */
+ data->fd = -1;
thread_cleanup_push((void*)stream->destroy, stream);
thread_cleanup_pop(!data->cb(data->data, stream));
}