Loading innobase/os/os0file.c +48 −7 Original line number Diff line number Diff line Loading @@ -302,7 +302,7 @@ os_file_handle_error( /* out: TRUE if we should retry the operation */ os_file_t file, /* in: file pointer */ char* name, /* in: name of a file or NULL */ const char* name, /* in: name of a file or NULL */ const char* operation)/* in: operation */ { ulint err; Loading Loading @@ -358,6 +358,32 @@ os_file_handle_error( return(FALSE); } #if !defined(__WIN__) && !defined(UNIV_HOTBACKUP) /******************************************************************** Obtain an exclusive lock on a file. */ static int os_file_lock( /*=========*/ /* out: 0 on success */ int fd, /* in: file descriptor */ const char* name) /* in: file name */ { struct flock lk; lk.l_type = F_WRLCK; lk.l_whence = SEEK_SET; lk.l_start = lk.l_len = 0; if (fcntl(fd, F_SETLK, &lk) == -1) { fprintf(stderr, "InnoDB: Unable to lock %s", name); perror (": fcntl"); close(fd); return(-1); } return 0; } #endif /* !defined(__WIN__) && !defined(UNIV_HOTBACKUP) */ /******************************************************************** Creates the seek mutexes used in positioned reads and writes. */ Loading Loading @@ -441,7 +467,7 @@ os_file_create_simple( } return(file); #else #else /* __WIN__ */ os_file_t file; int create_flag; ibool retry; Loading Loading @@ -478,12 +504,17 @@ os_file_create_simple( if (retry) { goto try_again; } #ifndef UNIV_HOTBACKUP } else if (os_file_lock(file, name)) { *success = FALSE; file = -1; #endif } else { *success = TRUE; } return(file); #endif #endif /* __WIN__ */ } /******************************************************************** Loading Loading @@ -544,7 +575,7 @@ os_file_create_simple_no_error_handling( } return(file); #else #else /* __WIN__ */ os_file_t file; int create_flag; Loading Loading @@ -572,12 +603,17 @@ os_file_create_simple_no_error_handling( if (file == -1) { *success = FALSE; #ifndef UNIV_HOTBACKUP } else if (os_file_lock(file, name)) { *success = FALSE; file = -1; #endif } else { *success = TRUE; } return(file); #endif #endif /* __WIN__ */ } /******************************************************************** Loading Loading @@ -689,7 +725,7 @@ os_file_create( } return(file); #else #else /* __WIN__ */ os_file_t file; int create_flag; ibool retry; Loading Loading @@ -772,12 +808,17 @@ os_file_create( if (retry) { goto try_again; } #ifndef UNIV_HOTBACKUP } else if (os_file_lock(file, name)) { *success = FALSE; file = -1; #endif } else { *success = TRUE; } return(file); #endif #endif /* __WIN__ */ } /*************************************************************************** Loading Loading
innobase/os/os0file.c +48 −7 Original line number Diff line number Diff line Loading @@ -302,7 +302,7 @@ os_file_handle_error( /* out: TRUE if we should retry the operation */ os_file_t file, /* in: file pointer */ char* name, /* in: name of a file or NULL */ const char* name, /* in: name of a file or NULL */ const char* operation)/* in: operation */ { ulint err; Loading Loading @@ -358,6 +358,32 @@ os_file_handle_error( return(FALSE); } #if !defined(__WIN__) && !defined(UNIV_HOTBACKUP) /******************************************************************** Obtain an exclusive lock on a file. */ static int os_file_lock( /*=========*/ /* out: 0 on success */ int fd, /* in: file descriptor */ const char* name) /* in: file name */ { struct flock lk; lk.l_type = F_WRLCK; lk.l_whence = SEEK_SET; lk.l_start = lk.l_len = 0; if (fcntl(fd, F_SETLK, &lk) == -1) { fprintf(stderr, "InnoDB: Unable to lock %s", name); perror (": fcntl"); close(fd); return(-1); } return 0; } #endif /* !defined(__WIN__) && !defined(UNIV_HOTBACKUP) */ /******************************************************************** Creates the seek mutexes used in positioned reads and writes. */ Loading Loading @@ -441,7 +467,7 @@ os_file_create_simple( } return(file); #else #else /* __WIN__ */ os_file_t file; int create_flag; ibool retry; Loading Loading @@ -478,12 +504,17 @@ os_file_create_simple( if (retry) { goto try_again; } #ifndef UNIV_HOTBACKUP } else if (os_file_lock(file, name)) { *success = FALSE; file = -1; #endif } else { *success = TRUE; } return(file); #endif #endif /* __WIN__ */ } /******************************************************************** Loading Loading @@ -544,7 +575,7 @@ os_file_create_simple_no_error_handling( } return(file); #else #else /* __WIN__ */ os_file_t file; int create_flag; Loading Loading @@ -572,12 +603,17 @@ os_file_create_simple_no_error_handling( if (file == -1) { *success = FALSE; #ifndef UNIV_HOTBACKUP } else if (os_file_lock(file, name)) { *success = FALSE; file = -1; #endif } else { *success = TRUE; } return(file); #endif #endif /* __WIN__ */ } /******************************************************************** Loading Loading @@ -689,7 +725,7 @@ os_file_create( } return(file); #else #else /* __WIN__ */ os_file_t file; int create_flag; ibool retry; Loading Loading @@ -772,12 +808,17 @@ os_file_create( if (retry) { goto try_again; } #ifndef UNIV_HOTBACKUP } else if (os_file_lock(file, name)) { *success = FALSE; file = -1; #endif } else { *success = TRUE; } return(file); #endif #endif /* __WIN__ */ } /*************************************************************************** Loading