diff options
author | Timur <timur@FreeBSD.org> | 2008-09-15 18:45:10 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2008-09-15 18:45:10 -0700 |
commit | 4dfa72423ef96b411e797eb1b5b4cb3ebd8e3d32 (patch) | |
tree | 69251d404ed9c4050cf4ca59bf9ef28d1dbcd86b /source3 | |
parent | a664cf7658b5295547983984ded6467de109f318 (diff) | |
download | samba-4dfa72423ef96b411e797eb1b5b4cb3ebd8e3d32.tar.gz samba-4dfa72423ef96b411e797eb1b5b4cb3ebd8e3d32.tar.bz2 samba-4dfa72423ef96b411e797eb1b5b4cb3ebd8e3d32.zip |
Fix aio on FreeBSD.
Diffstat (limited to 'source3')
-rw-r--r-- | source3/configure.in | 15 | ||||
-rw-r--r-- | source3/smbd/aio.c | 17 |
2 files changed, 31 insertions, 1 deletions
diff --git a/source3/configure.in b/source3/configure.in index 248c39ac4c..d9766e49d0 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -876,6 +876,21 @@ if test x"$samba_cv_sig_atomic_t" = x"yes"; then AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type]) fi +AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [ + AC_TRY_COMPILE([ +#include <sys/types.h> +#if STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif +#include <signal.h>],[struct sigevent s;], + samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)]) +if test x"$samba_cv_struct_sigevent" = x"yes"; then + AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent]) + AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , , + [#include <signal.h>]) +fi + AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [ AC_TRY_COMPILE([ #include <sys/types.h> diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c index 74275368bd..c3fd0a2bc0 100644 --- a/source3/smbd/aio.c +++ b/source3/smbd/aio.c @@ -24,7 +24,17 @@ /* The signal we'll use to signify aio done. */ #ifndef RT_SIGNAL_AIO -#define RT_SIGNAL_AIO (SIGRTMIN+3) +#ifndef SIGRTMIN +#define SIGRTMIN NSIG +#endif +#define RT_SIGNAL_AIO (SIGRTMIN+3) +#endif + +#ifndef HAVE_STRUCT_SIGEVENT_SIGEV_VALUE_SIVAL_PTR +#ifdef HAVE_STRUCT_SIGEVENT_SIGEV_VALUE_SIGVAL_PTR +#define sival_int sigval_int +#define sival_ptr sigval_ptr +#endif #endif /**************************************************************************** @@ -581,6 +591,11 @@ static bool handle_aio_completed(struct aio_extra *aio_ex, int *perr) { int err; + if(!aio_ex) { + DEBUG(3, ("handle_aio_completed: Non-existing aio_ex passed\n")); + return false; + } + /* Ensure the operation has really completed. */ if (SMB_VFS_AIO_ERROR(aio_ex->fsp, &aio_ex->acb) == EINPROGRESS) { DEBUG(10,( "handle_aio_completed: operation mid %u still in " |