Commit a80acb27 authored by inaam's avatar inaam

branches/innodb+: Merge revisions r2455:r2459 from branches/zip

(These changes remove the POSIX AIO stuff)
parent a48c8a28
......@@ -4442,8 +4442,6 @@ fil_aio_wait(
#ifdef WIN_ASYNC_IO
ret = os_aio_windows_handle(segment, 0, &fil_node,
&message, &type);
#elif defined(POSIX_ASYNC_IO)
ret = os_aio_posix_handle(segment, &fil_node, &message);
#else
ret = 0; /* Eliminate compiler warning */
ut_error;
......
......@@ -663,24 +663,6 @@ os_aio_windows_handle(
ulint* type); /* out: OS_FILE_WRITE or ..._READ */
#endif
/* Currently we do not use Posix async i/o */
#ifdef POSIX_ASYNC_IO
/**************************************************************************
This function is only used in Posix asynchronous i/o. Waits for an aio
operation to complete. */
UNIV_INTERN
ibool
os_aio_posix_handle(
/*================*/
/* out: TRUE if the aio operation succeeded */
ulint array_no, /* in: array number 0 - 3 */
fil_node_t**message1, /* out: the messages passed with the aio
request; note that also in the case where
the aio operation failed, these output
parameters are valid and can be used to
restart the operation, for example */
void** message2);
#endif
/**************************************************************************
Does simulated aio. This function should be called by an i/o-handler
thread. */
......
......@@ -22,12 +22,6 @@ Created 10/21/1995 Heikki Tuuri
#include <errno.h>
#endif /* UNIV_HOTBACKUP */
#ifdef POSIX_ASYNC_IO
/* We assume in this case that the OS has standard Posix aio (at least SunOS
2.6, HP-UX 11i and AIX 4.3 have) */
#endif
/* This specifies the file permissions InnoDB uses when it creates files in
Unix; the value of os_innodb_umask is initialized in ha_innodb.cc to
my_umask */
......@@ -96,9 +90,6 @@ struct os_aio_slot_struct{
OVERLAPPED struct */
OVERLAPPED control; /* Windows control block for the
aio request */
#elif defined(POSIX_ASYNC_IO)
struct aiocb control; /* Posix control block for aio
request */
#endif
};
......@@ -331,10 +322,6 @@ os_file_get_last_error(
if (err == ENOSPC) {
return(OS_FILE_DISK_FULL);
#ifdef POSIX_ASYNC_IO
} else if (err == EAGAIN) {
return(OS_FILE_AIO_RESOURCES_RESERVED);
#endif
} else if (err == ENOENT) {
return(OS_FILE_NOT_FOUND);
} else if (err == EEXIST) {
......@@ -2921,9 +2908,7 @@ os_aio_init(
ulint n_write_segs;
ulint n_per_seg;
ulint i;
#ifdef POSIX_ASYNC_IO
sigset_t sigset;
#endif
ut_ad(n % n_segments == 0);
ut_ad(n_segments >= 4);
......@@ -2975,23 +2960,7 @@ os_aio_init(
os_last_printout = time(NULL);
#ifdef POSIX_ASYNC_IO
/* Block aio signals from the current thread and its children:
for this to work, the current thread must be the first created
in the database, so that all its children will inherit its
signal mask */
/* TODO: to work MySQL needs the SIGALARM signal; the following
will not work yet! */
sigemptyset(&sigset);
sigaddset(&sigset, SIGRTMIN + 1 + 0);
sigaddset(&sigset, SIGRTMIN + 1 + 1);
sigaddset(&sigset, SIGRTMIN + 1 + 2);
sigaddset(&sigset, SIGRTMIN + 1 + 3);
pthread_sigmask(SIG_BLOCK, &sigset, NULL); */
#endif
}
}
#ifdef WIN_ASYNC_IO
/****************************************************************************
......@@ -3125,7 +3094,7 @@ os_aio_get_array_and_local_segment(
Gets an integer value designating a specified aio array. This is used
to give numbers to signals in Posix aio. */
#if !defined(WIN_ASYNC_IO) && defined(POSIX_ASYNC_IO)
#if !defined(WIN_ASYNC_IO)
static
ulint
os_aio_get_array_no(
......@@ -3179,7 +3148,7 @@ os_aio_get_array_from_no(
return(NULL);
}
}
#endif /* if !defined(WIN_ASYNC_IO) && defined(POSIX_ASYNC_IO) */
#endif /* if !defined(WIN_ASYNC_IO) */
/***********************************************************************
Requests for a slot in the aio array. If no slot is available, waits until
......@@ -3209,10 +3178,6 @@ os_aio_array_reserve_slot(
os_aio_slot_t* slot;
#ifdef WIN_ASYNC_IO
OVERLAPPED* control;
#elif defined(POSIX_ASYNC_IO)
struct aiocb* control;
#endif
ulint i;
loop:
......@@ -3269,30 +3234,8 @@ os_aio_array_reserve_slot(
control->Offset = (DWORD)offset;
control->OffsetHigh = (DWORD)offset_high;
os_event_reset(slot->event);
#elif defined(POSIX_ASYNC_IO)
#if (UNIV_WORD_SIZE == 8)
offset = offset + (offset_high << 32);
#else
ut_a(offset_high == 0);
#endif
control = &(slot->control);
control->aio_fildes = file;
control->aio_buf = buf;
control->aio_nbytes = len;
control->aio_offset = offset;
control->aio_reqprio = 0;
control->aio_sigevent.sigev_notify = SIGEV_SIGNAL;
control->aio_sigevent.sigev_signo
= SIGRTMIN + 1 + os_aio_get_array_no(array);
/* TODO: How to choose the signal numbers? */
/*
fprintf(stderr, "AIO signal number %lu\n",
(ulint) control->aio_sigevent.sigev_signo);
*/
control->aio_sigevent.sigev_value.sival_ptr = slot;
#endif
os_mutex_exit(array->mutex);
return(slot);
......@@ -3540,10 +3483,6 @@ os_aio(
ret = ReadFile(file, buf, (DWORD)n, &len,
&(slot->control));
#elif defined(POSIX_ASYNC_IO)
slot->control.aio_lio_opcode = LIO_READ;
err = (ulint) aio_read(&(slot->control));
fprintf(stderr, "Starting POSIX aio read %lu\n", err);
#endif
} else {
if (!wake_later) {
......@@ -3558,10 +3497,6 @@ os_aio(
os_n_file_writes++;
ret = WriteFile(file, buf, (DWORD)n, &len,
&(slot->control));
#elif defined(POSIX_ASYNC_IO)
slot->control.aio_lio_opcode = LIO_WRITE;
err = (ulint) aio_write(&(slot->control));
fprintf(stderr, "Starting POSIX aio write %lu\n", err);
#endif
} else {
if (!wake_later) {
......@@ -3706,12 +3641,12 @@ os_aio_windows_handle(
if (ret && len == slot->len) {
ret_val = TRUE;
# ifdef UNIV_DO_FLUSH
#ifdef UNIV_DO_FLUSH
if (slot->type == OS_FILE_WRITE
&& !os_do_not_call_flush_at_each_write) {
ut_a(TRUE == os_file_flush(slot->file));
}
# endif /* UNIV_DO_FLUSH */
#endif /* UNIV_DO_FLUSH */
} else {
os_file_handle_error(slot->name, "Windows aio");
......@@ -3726,87 +3661,6 @@ os_aio_windows_handle(
}
#endif
#ifdef POSIX_ASYNC_IO
/**************************************************************************
This function is only used in Posix asynchronous i/o. Waits for an aio
operation to complete. */
UNIV_INTERN
ibool
os_aio_posix_handle(
/*================*/
/* out: TRUE if the aio operation succeeded */
ulint array_no, /* in: array number 0 - 3 */
fil_node_t**message1, /* out: the messages passed with the aio
request; note that also in the case where
the aio operation failed, these output
parameters are valid and can be used to
restart the operation, for example */
void** message2)
{
os_aio_array_t* array;
os_aio_slot_t* slot;
siginfo_t info;
sigset_t sigset;
sigset_t proc_sigset;
sigset_t thr_sigset;
int ret;
int i;
int sig;
sigemptyset(&sigset);
sigaddset(&sigset, SIGRTMIN + 1 + array_no);
pthread_sigmask(SIG_UNBLOCK, &sigset, NULL);
#if 0
sigprocmask(0, NULL, &proc_sigset);
pthread_sigmask(0, NULL, &thr_sigset);
for (i = 32 ; i < 40; i++) {
fprintf(stderr, "%lu : %lu %lu\n", (ulint)i,
(ulint) sigismember(&proc_sigset, i),
(ulint) sigismember(&thr_sigset, i));
}
#endif
ret = sigwaitinfo(&sigset, &info);
if (sig != SIGRTMIN + 1 + array_no) {
ut_error;
return(FALSE);
}
fputs("Handling POSIX aio\n", stderr);
array = os_aio_get_array_from_no(array_no);
os_mutex_enter(array->mutex);
slot = info.si_value.sival_ptr;
ut_a(slot->reserved);
*message1 = slot->message1;
*message2 = slot->message2;
# ifdef UNIV_DO_FLUSH
if (slot->type == OS_FILE_WRITE
&& !os_do_not_call_flush_at_each_write) {
ut_a(TRUE == os_file_flush(slot->file));
}
# endif /* UNIV_DO_FLUSH */
os_mutex_exit(array->mutex);
os_aio_array_free_slot(array, slot);
return(TRUE);
}
#endif
/**************************************************************************
Does simulated aio. This function should be called by an i/o-handler
thread. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment