Commit a5d8f243 authored by marko@hundin.mysql.fi's avatar marko@hundin.mysql.fi

InnoDB: os0file.c:

  Do not lock raw devices or files opened for read only
parent 59e44ff8
...@@ -387,22 +387,19 @@ os_file_lock( ...@@ -387,22 +387,19 @@ os_file_lock(
/*=========*/ /*=========*/
/* out: 0 on success */ /* out: 0 on success */
int fd, /* in: file descriptor */ int fd, /* in: file descriptor */
const char* name, /* in: file name */ const char* name) /* in: file name */
uint lock_type) /* in: lock_type */
{ {
struct flock lk; struct flock lk;
lk.l_type = lock_type; lk.l_type = F_WRLCK;
lk.l_whence = SEEK_SET; lk.l_whence = SEEK_SET;
lk.l_start = lk.l_len = 0; lk.l_start = lk.l_len = 0;
if (fcntl(fd, F_SETLK, &lk) == -1) { if (fcntl(fd, F_SETLK, &lk) == -1) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Unable to lock %s with lock %d, error: %d", "InnoDB: Unable to lock %s, error: %d", name, errno);
name, lock_type, errno);
perror (": fcntl");
close(fd); close(fd);
return(-1); return(-1);
} }
return 0; return(0);
} }
#endif /* USE_FILE_LOCK */ #endif /* USE_FILE_LOCK */
...@@ -869,7 +866,8 @@ try_again: ...@@ -869,7 +866,8 @@ try_again:
goto try_again; goto try_again;
} }
#ifdef USE_FILE_LOCK #ifdef USE_FILE_LOCK
} else if (os_file_lock(file, name, F_WRLCK)) { } else if (access_type == OS_FILE_READ_WRITE
&& os_file_lock(file, name)) {
*success = FALSE; *success = FALSE;
file = -1; file = -1;
#endif #endif
...@@ -980,7 +978,8 @@ os_file_create_simple_no_error_handling( ...@@ -980,7 +978,8 @@ os_file_create_simple_no_error_handling(
if (file == -1) { if (file == -1) {
*success = FALSE; *success = FALSE;
#ifdef USE_FILE_LOCK #ifdef USE_FILE_LOCK
} else if (os_file_lock(file, name, F_WRLCK)) { } else if (access_type == OS_FILE_READ_WRITE
&& os_file_lock(file, name)) {
*success = FALSE; *success = FALSE;
file = -1; file = -1;
#endif #endif
...@@ -1194,7 +1193,8 @@ try_again: ...@@ -1194,7 +1193,8 @@ try_again:
goto try_again; goto try_again;
} }
#ifdef USE_FILE_LOCK #ifdef USE_FILE_LOCK
} else if (os_file_lock(file, name, F_WRLCK)) { } else if (create_mode != OS_FILE_OPEN_RAW
&& os_file_lock(file, name)) {
*success = FALSE; *success = FALSE;
file = -1; file = -1;
#endif #endif
...@@ -1395,9 +1395,6 @@ os_file_close( ...@@ -1395,9 +1395,6 @@ os_file_close(
#else #else
int ret; int ret;
#ifdef USE_FILE_LOCK
(void) os_file_lock(file, "unknown", F_UNLCK);
#endif
ret = close(file); ret = close(file);
if (ret == -1) { if (ret == -1) {
...@@ -1434,9 +1431,6 @@ os_file_close_no_error_handling( ...@@ -1434,9 +1431,6 @@ os_file_close_no_error_handling(
#else #else
int ret; int ret;
#ifdef USE_FILE_LOCK
(void) os_file_lock(file, "unknown", F_UNLCK);
#endif
ret = close(file); ret = close(file);
if (ret == -1) { if (ret == -1) {
......
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