summaryrefslogtreecommitdiff
path: root/mysys/my_lock.c
diff options
context:
space:
mode:
authormonty@donna.mysql.com <>2000-10-14 03:16:35 +0300
committermonty@donna.mysql.com <>2000-10-14 03:16:35 +0300
commit7ac13c89e62da94aab70d3e8e89d368cb7bc7e5c (patch)
tree1b0bc8c3909ac0c3e49a7d72615c583c9a72254d /mysys/my_lock.c
parent5134b08422d9e69228fe5f66a51f0e5f12c81e86 (diff)
downloadmariadb-git-7ac13c89e62da94aab70d3e8e89d368cb7bc7e5c.tar.gz
Fix of LEFT JOIN optimizer bug, problem with key cache on Windows and
a lot of portability issues.
Diffstat (limited to 'mysys/my_lock.c')
-rw-r--r--mysys/my_lock.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/mysys/my_lock.c b/mysys/my_lock.c
index 4f1506f20cf..ed637648353 100644
--- a/mysys/my_lock.c
+++ b/mysys/my_lock.c
@@ -109,10 +109,17 @@ int my_lock(File fd, int locktype, my_off_t start, my_off_t length,
printf("Error: DosSetFileLocks() == %d\n",rc);
}
#elif defined(HAVE_LOCKING)
- if (MyFlags & MY_SEEK_NOT_DONE)
- VOID(my_seek(fd,start,MY_SEEK_SET,MYF(MyFlags & ~MY_SEEK_NOT_DONE)));
- if (!locking(fd,locktype,(ulong) length) || errno == EINVAL)
- DBUG_RETURN(0);
+ /* Windows */
+ {
+ my_bool error;
+ pthread_mutex_lock(&my_file_info[fd].mutex);
+ if (MyFlags & MY_SEEK_NOT_DONE)
+ VOID(my_seek(fd,start,MY_SEEK_SET,MYF(MyFlags & ~MY_SEEK_NOT_DONE)));
+ error= locking(fd,locktype,(ulong) length) && errno != EINVAL;
+ pthread_mutex_unlock(&my_file_info[fd].mutex);
+ if (!error)
+ DBUG_RETURN(0);
+ }
#else
#if defined(HAVE_FCNTL)
lock.l_type= (short) locktype;