summaryrefslogtreecommitdiff
path: root/storage/myisam/ft_boolean_search.c
diff options
context:
space:
mode:
authorVenkata Sidagam <venkata.sidagam@oracle.com>2012-05-16 16:06:07 +0530
committerVenkata Sidagam <venkata.sidagam@oracle.com>2012-05-16 16:06:07 +0530
commit042e918d65185575dbd7435cbd4acd8eed43a10a (patch)
tree40fe12f8f63dd5a038f5d3345bcb8009c5af04f4 /storage/myisam/ft_boolean_search.c
parent0de21532cbf714278c8393c57c77c1bdc332ea81 (diff)
parentdb2ad645ef27250b933b1a7d6802b196cedca135 (diff)
downloadmariadb-git-042e918d65185575dbd7435cbd4acd8eed43a10a.tar.gz
Merging the fix from mysql-5.1 to mysql-5.5
Diffstat (limited to 'storage/myisam/ft_boolean_search.c')
-rw-r--r--storage/myisam/ft_boolean_search.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/storage/myisam/ft_boolean_search.c b/storage/myisam/ft_boolean_search.c
index b99095eb512..a9ce4436025 100644
--- a/storage/myisam/ft_boolean_search.c
+++ b/storage/myisam/ft_boolean_search.c
@@ -354,7 +354,7 @@ static int _ftb_no_dupes_cmp(void* not_used __attribute__((unused)),
returns 1 if the search was finished (must-word wasn't found)
*/
-static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
+static int _ft2_search_no_lock(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
{
int r;
int subkeys=1;
@@ -454,7 +454,7 @@ static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
ftbw->key_root=info->s->state.key_root[ftb->keynr];
ftbw->keyinfo=info->s->keyinfo+ftb->keynr;
ftbw->off=0;
- return _ft2_search(ftb, ftbw, 0);
+ return _ft2_search_no_lock(ftb, ftbw, 0);
}
/* matching key found */
@@ -482,6 +482,18 @@ static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
return 0;
}
+static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
+{
+ int r;
+ MYISAM_SHARE *share= ftb->info->s;
+ if (share->concurrent_insert)
+ mysql_rwlock_rdlock(&share->key_root_lock[ftb->keynr]);
+ r= _ft2_search_no_lock(ftb, ftbw, init_search);
+ if (share->concurrent_insert)
+ mysql_rwlock_unlock(&share->key_root_lock[ftb->keynr]);
+ return r;
+}
+
static void _ftb_init_index_search(FT_INFO *ftb)
{
int i;