Commit d0cd4949 authored by Monty's avatar Monty

MDEV-30118 exception in ha_maria::extra

I have not been able to repeat the problem, but the stack trace indicates
that ha_maria::extra() is called with a null file pointer.

This indicates the table has either never been opened or opened and closed,
with file pointer set to NULL, but ha_maria::extra() is still called.

In JOIN::partial_cleanup() we are only checking of table->is_created(),
which will fail if table was created and later closed.

Fixed by clearing table->created if table is dropped.

I added an assert to is_created() to catch the case that the create
flag does not match 'file'.
parent 92ff7bb6
...@@ -20320,6 +20320,8 @@ free_tmp_table(THD *thd, TABLE *entry) ...@@ -20320,6 +20320,8 @@ free_tmp_table(THD *thd, TABLE *entry)
} }
entry->file->ha_drop_table(entry->s->path.str); entry->file->ha_drop_table(entry->s->path.str);
delete entry->file; delete entry->file;
entry->file= NULL;
entry->reset_created();
} }
/* free blobs */ /* free blobs */
......
...@@ -1643,7 +1643,11 @@ struct TABLE ...@@ -1643,7 +1643,11 @@ struct TABLE
} }
/// Return true if table is instantiated, and false otherwise. /// Return true if table is instantiated, and false otherwise.
bool is_created() const { return created; } bool is_created() const
{
DBUG_ASSERT(!created || file != 0);
return created;
}
/** /**
Set the table as "created", and enable flags in storage engine Set the table as "created", and enable flags in storage engine
...@@ -1658,6 +1662,11 @@ struct TABLE ...@@ -1658,6 +1662,11 @@ struct TABLE
created= true; created= true;
} }
void reset_created()
{
created= 0;
}
/* /*
Returns TRUE if the table is filled at execution phase (and so, the Returns TRUE if the table is filled at execution phase (and so, the
optimizer must not do anything that depends on the contents of the table, optimizer must not do anything that depends on the contents of the table,
......
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