diff options
author | holyfoot/hf@mysql.com/hfmain.(none) <> | 2007-06-25 13:31:34 +0500 |
---|---|---|
committer | holyfoot/hf@mysql.com/hfmain.(none) <> | 2007-06-25 13:31:34 +0500 |
commit | 0a4b46be90c770de32e1de2352e745ce87484f00 (patch) | |
tree | 3f0636e9a1dfd26d0d1bf5e37b9c40c032fad8ad /sql/handler.h | |
parent | 38991f3e803c552f014eda86a974587bceea03c0 (diff) | |
download | mariadb-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.h | 11 |
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() { |