summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2012-01-11 16:37:48 -0800
committerJeremy Allison <jra@samba.org>2012-01-12 03:10:52 +0100
commitddc1f3df5183081aeb7c5b97b7fa4426c772346d (patch)
tree793b687bdfac179b81f2e5c9b609b294f21791c0
parentf15cf9176df974c8a460db3ce74abf38d3f552ae (diff)
downloadsamba-ddc1f3df5183081aeb7c5b97b7fa4426c772346d.tar.gz
samba-ddc1f3df5183081aeb7c5b97b7fa4426c772346d.tar.bz2
samba-ddc1f3df5183081aeb7c5b97b7fa4426c772346d.zip
Ensure we always free aio_ex on all error paths by moving the TALLOC_FREE
call out of smbd_aio_complete_aio_ex() and into the caller. Autobuild-User: Jeremy Allison <jra@samba.org> Autobuild-Date: Thu Jan 12 03:10:52 CET 2012 on sn-devel-104
-rw-r--r--source3/modules/vfs_aio_fork.c1
-rw-r--r--source3/modules/vfs_aio_pthread.c3
-rw-r--r--source3/smbd/aio.c3
3 files changed, 4 insertions, 3 deletions
diff --git a/source3/modules/vfs_aio_fork.c b/source3/modules/vfs_aio_fork.c
index 01eb97de86..bcd7c6ae2d 100644
--- a/source3/modules/vfs_aio_fork.c
+++ b/source3/modules/vfs_aio_fork.c
@@ -434,6 +434,7 @@ static void handle_aio_completion(struct event_context *event_ctx,
aio_ex = (struct aio_extra *)child->aiocb->aio_sigevent.sigev_value.sival_ptr;
smbd_aio_complete_aio_ex(aio_ex);
+ TALLOC_FREE(aio_ex);
}
static int aio_child_destructor(struct aio_child *child)
diff --git a/source3/modules/vfs_aio_pthread.c b/source3/modules/vfs_aio_pthread.c
index 82611b0a7b..b6d4e1ef35 100644
--- a/source3/modules/vfs_aio_pthread.c
+++ b/source3/modules/vfs_aio_pthread.c
@@ -296,7 +296,7 @@ static void aio_pthread_handle_completion(struct event_context *event_ctx,
DEBUG(10,("aio_pthread_handle_completion: jobid %d completed\n",
jobid ));
-
+ TALLOC_FREE(aio_ex);
}
/************************************************************************
@@ -424,6 +424,7 @@ static void aio_pthread_handle_immediate(struct tevent_context *ctx,
TALLOC_FREE(pjobid);
aio_ex = (struct aio_extra *)pd->aiocb->aio_sigevent.sigev_value.sival_ptr;
smbd_aio_complete_aio_ex(aio_ex);
+ TALLOC_FREE(aio_ex);
}
/************************************************************************
diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c
index 07b8388fba..44081f69a0 100644
--- a/source3/smbd/aio.c
+++ b/source3/smbd/aio.c
@@ -67,6 +67,7 @@ static void smbd_aio_signal_handler(struct tevent_context *ev_ctx,
info->si_value.sival_ptr;
smbd_aio_complete_aio_ex(aio_ex);
+ TALLOC_FREE(aio_ex);
}
@@ -931,8 +932,6 @@ void smbd_aio_complete_aio_ex(struct aio_extra *aio_ex)
if (!handle_aio_completed(aio_ex, &ret)) {
return;
}
-
- TALLOC_FREE(aio_ex);
}
/****************************************************************************