diff options
author | unknown <svoj@mysql.com/june.mysql.com> | 2007-05-23 12:38:34 +0500 |
---|---|---|
committer | unknown <svoj@mysql.com/june.mysql.com> | 2007-05-23 12:38:34 +0500 |
commit | e5b2adeac1af976323f61700dd00694b9063e17f (patch) | |
tree | f3d76e21e36cfecb2630972071b33b496b3477a9 /mysys | |
parent | 05464a4f457b5167749e67a4951f20dcc2fa196b (diff) | |
parent | a656c71e8ae765ea194a59a69d440d203308f235 (diff) | |
download | mariadb-git-e5b2adeac1af976323f61700dd00694b9063e17f.tar.gz |
Merge mysql.com:/home/svoj/devel/bk/mysql-4.1
into mysql.com:/home/svoj/devel/mysql/merge/mysql-4.1-engines
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/my_seek.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/mysys/my_seek.c b/mysys/my_seek.c index a9ae68cd5f0..805a5654ffc 100644 --- a/mysys/my_seek.c +++ b/mysys/my_seek.c @@ -24,7 +24,9 @@ my_off_t pos The expected position (absolute or relative) int whence A direction parameter and one of {SEEK_SET, SEEK_CUR, SEEK_END} - myf MyFlags Not used. + myf MyFlags MY_THREADSAFE must be set in case my_seek may be mixed + with my_pread/my_pwrite calls and fd is shared among + threads. DESCRIPTION The my_seek function is a wrapper around the system call lseek and @@ -51,7 +53,16 @@ my_off_t my_seek(File fd, my_off_t pos, int whence, whence, MyFlags)); DBUG_ASSERT(pos != MY_FILEPOS_ERROR); /* safety check */ - newpos=lseek(fd, pos, whence); +#if defined(THREAD) && !defined(HAVE_PREAD) + if (MyFlags & MY_THREADSAFE) + { + pthread_mutex_lock(&my_file_info[fd].mutex); + newpos= lseek(fd, pos, whence); + pthread_mutex_unlock(&my_file_info[fd].mutex); + } + else +#endif + newpos= lseek(fd, pos, whence); if (newpos == (os_off_t) -1) { my_errno=errno; |