Commit eea61b18 authored by unknown's avatar unknown

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.


sql/handler.h:
  Bug #29252 Assertion 'table->file || table->file->inited == handler::NONE' failed.
  
  make sure that 'inited' is handler::NONE if index_init() or rnd_init()
  returned an error
parent fdbefa8d
...@@ -1097,10 +1097,12 @@ class handler :public Sql_alloc ...@@ -1097,10 +1097,12 @@ class handler :public Sql_alloc
int ha_index_init(uint idx, bool sorted) int ha_index_init(uint idx, bool sorted)
{ {
int result;
DBUG_ENTER("ha_index_init"); DBUG_ENTER("ha_index_init");
DBUG_ASSERT(inited==NONE); DBUG_ASSERT(inited==NONE);
if (!(result= index_init(idx, sorted)))
inited=INDEX; inited=INDEX;
DBUG_RETURN(index_init(idx, sorted)); DBUG_RETURN(result);
} }
int ha_index_end() int ha_index_end()
{ {
...@@ -1111,10 +1113,11 @@ class handler :public Sql_alloc ...@@ -1111,10 +1113,11 @@ class handler :public Sql_alloc
} }
int ha_rnd_init(bool scan) int ha_rnd_init(bool scan)
{ {
int result;
DBUG_ENTER("ha_rnd_init"); DBUG_ENTER("ha_rnd_init");
DBUG_ASSERT(inited==NONE || (inited==RND && scan)); DBUG_ASSERT(inited==NONE || (inited==RND && scan));
inited=RND; inited= (result= rnd_init(scan)) ? NONE: RND;
DBUG_RETURN(rnd_init(scan)); DBUG_RETURN(result);
} }
int ha_rnd_end() int ha_rnd_end()
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment