diff options
author | Martin Willi <martin@revosec.ch> | 2013-07-02 14:04:51 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-07-18 16:00:29 +0200 |
commit | c9d1742b5da37de26ed622e3b1317572da2f4978 (patch) | |
tree | f5aa595af07b1a9c089f15c68e4239308e0c2035 /src/libstrongswan/networking/streams/stream_service.c | |
parent | 58d0dadddc44244eb9c5e483cde6641afb54ee49 (diff) | |
download | strongswan-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.c | 7 |
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)); } |