summaryrefslogtreecommitdiff
path: root/sql/handler.h
diff options
context:
space:
mode:
authorholyfoot/hf@mysql.com/hfmain.(none) <>2007-06-25 13:31:34 +0500
committerholyfoot/hf@mysql.com/hfmain.(none) <>2007-06-25 13:31:34 +0500
commit0a4b46be90c770de32e1de2352e745ce87484f00 (patch)
tree3f0636e9a1dfd26d0d1bf5e37b9c40c032fad8ad /sql/handler.h
parent38991f3e803c552f014eda86a974587bceea03c0 (diff)
downloadmariadb-git-0a4b46be90c770de32e1de2352e745ce87484f00.tar.gz
Bug #29252 Assertion 'table->file || table->file->inited == handler::NONE' failed
when index_init() or rnd_init() return an error, we still set handler->inited to INDEX or RND in ha_index_init and ha_rnd_init. As caller doesn't call ha_*_end() in this case, we get DBUG_ASSERT failed.
Diffstat (limited to 'sql/handler.h')
-rw-r--r--sql/handler.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/sql/handler.h b/sql/handler.h
index 6a16dd96f49..cac272a9661 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -1097,10 +1097,12 @@ public:
int ha_index_init(uint idx, bool sorted)
{
+ int result;
DBUG_ENTER("ha_index_init");
DBUG_ASSERT(inited==NONE);
- inited=INDEX;
- DBUG_RETURN(index_init(idx, sorted));
+ if (!(result= index_init(idx, sorted)))
+ inited=INDEX;
+ DBUG_RETURN(result);
}
int ha_index_end()
{
@@ -1111,10 +1113,11 @@ public:
}
int ha_rnd_init(bool scan)
{
+ int result;
DBUG_ENTER("ha_rnd_init");
DBUG_ASSERT(inited==NONE || (inited==RND && scan));
- inited=RND;
- DBUG_RETURN(rnd_init(scan));
+ inited= (result= rnd_init(scan)) ? NONE: RND;
+ DBUG_RETURN(result);
}
int ha_rnd_end()
{