Commit 0400d665 authored by heikki@donna.mysql.fi's avatar heikki@donna.mysql.fi
Browse files

Merge heikki@work.mysql.com:/home/my/mysql

into donna.mysql.fi:/home/heikki/mysqle
parents c488a2cd f26d163f
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -100,7 +100,17 @@ log. */
				requests in a batch, and only after that
 				wake the i/o-handler thread; this has
				effect only in simulated aio */ 
#define OS_WIN31     1
#define OS_WIN95     2	
#define OS_WINNT     3

/***************************************************************************
Gets the operating system version. Currently works only on Windows. */

ulint
os_get_os_version(void);
/*===================*/
                  /* out: OS_WIN95, OS_WIN31, OS_WINNT (2000 == NT) */
/********************************************************************
Opens an existing file or creates a new. */

+37 −7
Original line number Diff line number Diff line
@@ -103,6 +103,38 @@ os_aio_array_t* os_aio_sync_array = NULL;

ulint	os_aio_n_segments	= ULINT_UNDEFINED;

/***************************************************************************
Gets the operating system version. Currently works only on Windows. */

ulint
os_get_os_version(void)
/*===================*/
                  /* out: OS_WIN95, OS_WIN31, OS_WINNT (2000 == NT) */
{
#ifdef __WIN__
  OSVERSIONINFO     os_info;

  os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

  ut_a(GetVersionEx(&os_info));

  if (os_info.dwPlatformId == VER_PLATFORM_WIN32s) {
    return(OS_WIN31);
  } else if (os_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
    return(OS_WIN95);
  } else if (os_info.dwPlatformId == VER_PLATFORM_WIN32_NT) {
    return(OS_WINNT);
  } else {
    ut_error;
    return(0);
  }
#else
  ut_error;

  return(0);
#endif
}

/***************************************************************************
Retrieves the last error number if an error occurs in a file io function.
The number should be retrieved before any other OS calls (because they may
@@ -438,13 +470,13 @@ os_file_set_size(
	byte*   buf;

try_again:
	/* We use a very big 16 MB buffer in writing because Linux is
	/* We use a very big 8 MB buffer in writing because Linux may be
	extremely slow in fdatasync on 1 MB writes */

	buf = ut_malloc(UNIV_PAGE_SIZE * 1024);
	buf = ut_malloc(UNIV_PAGE_SIZE * 512);

	/* Write buffer full of zeros */
	for (i = 0; i < UNIV_PAGE_SIZE * 1024; i++) {
	for (i = 0; i < UNIV_PAGE_SIZE * 512; i++) {
	        buf[i] = '\0';
	}

@@ -456,10 +488,10 @@ os_file_set_size(
	UT_NOT_USED(size_high);
#endif
	while (offset < low) {
	        if (low - offset < UNIV_PAGE_SIZE * 1024) {
	        if (low - offset < UNIV_PAGE_SIZE * 512) {
	                 n_bytes = low - offset;
	        } else {
	                 n_bytes = UNIV_PAGE_SIZE * 1024;
	                 n_bytes = UNIV_PAGE_SIZE * 512;
	        }
	  
	        ret = os_file_write(name, file, buf, offset, 0, n_bytes);
@@ -475,8 +507,6 @@ os_file_set_size(

	ret = os_file_flush(file);

	fsync(file);

	if (ret) {
	        return(TRUE);
	}
+12 −4
Original line number Diff line number Diff line
@@ -549,11 +549,19 @@ innobase_start_or_create_for_mysql(void)
	srv_n_file_io_threads = 4;
#endif

#ifdef WIN_ASYNC_IO
	/* On NT always use aio */
#ifdef __WIN__
	if (os_get_os_version() == OS_WIN95
	    || os_get_os_version() == OS_WIN31) {
	  /* On Win 95, 98, ME, and Win32 subsystem for Windows 3.1 use
	     simulated aio */

	  os_aio_use_native_aio = FALSE;
	  srv_n_file_io_threads = 4;
	} else {
	  /* On NT and Win 2000 always use aio */
	  os_aio_use_native_aio = TRUE;
	}
#endif

	if (!os_aio_use_native_aio) {
		os_aio_init(4 * SRV_N_PENDING_IOS_PER_THREAD
						* srv_n_file_io_threads,