fis-gtm/sr_unix/gtm_aio.h

94 lines
2.3 KiB
C

/****************************************************************
* *
* Copyright 2003, 2009 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#ifndef GTM_AIO_H
#define GTM_AIO_H
#ifndef __CYGWIN__
#include <aio.h>
#endif
#if defined(__CYGWIN__) && !defined(AIO_CANCELED)
/* minimal just to satisfy mur_init.c and mur_read_file.h.
* More would be needed if MUR_USE_AIO were defined */
struct aiocb {
int aio_fildes;
volatile void *aio_buf;
size_t aio_nbytes;
off_t aio_offset;
size_t aio_bytesread;
int aio_errno;
};
#endif /* __CYGWIN__ empty aio.h */
#define AIO_POLL_SLEEP_TIME 10 /* 10 msec */
#if defined(_AIX)
#define AIO_READ(FD, AIOCBP, STATUS1, STATUS2) \
{ \
STATUS2 = SS_NORMAL; \
(AIOCBP)->aio_whence = SEEK_SET; \
do \
{ \
STATUS1 = aio_read(FD, AIOCBP); \
} while(-1 == STATUS1 && EAGAIN == errno); \
if (-1 == STATUS1) \
STATUS1 = errno; \
}
#define AIO_ERROR(AIOCBP, STATUS) \
{ \
while ((STATUS = aio_error((AIOCBP)->aio_handle)) == EINPROGRESS) \
SHORT_SLEEP(AIO_POLL_SLEEP_TIME); \
}
#define AIO_RETURN(AIOCBP, STATUS) \
{ \
STATUS = aio_return((AIOCBP)->aio_handle); \
}
#else
/* Non-AIX */
#define AIO_READ(FD, AIOCBP, STATUS1, STATUS2) \
{ \
STATUS2 = SS_NORMAL; \
AIOCBP->aio_fildes = FD; \
do \
{ \
STATUS1 = aio_read(AIOCBP); \
} while(-1 == STATUS1 && EAGAIN == errno); \
if (-1 == STATUS1) \
STATUS1 = errno; \
}
#define AIO_ERROR(AIOCBP, STATUS) \
{ \
while ((STATUS = aio_error(AIOCBP)) == EINPROGRESS) \
SHORT_SLEEP(AIO_POLL_SLEEP_TIME); \
}
#define AIO_RETURN(AIOCBP, STATUS) \
{ \
STATUS = aio_return(AIOCBP); \
}
#endif
#define AIO_CANCEL(FD, AIOCBP, STATUS) \
{ \
STATUS = aio_cancel(FD, AIOCBP); \
}
#endif