3 Feb
2014
3 Feb
'14
5:22 p.m.
Hi, Sergey! On Jan 31, Sergey Vojtovich wrote: > > > > I'm sorry, I don't understand that at all. > > > > Why my_refs is only incremented in debug builds? In non-debug builds you > > wait until all tables but one are closed, in debug builds you may keep > > more than one table opened. > See above, this patch removes #ifndef DBUG_OFF, so my_refs are counted properly > in both builds. Right. Sorry. My mistake. > > You wait here on a condition, how do you know there's FLUSH TABLES (or > > anything at all) running that will signal this condition? > 1. we're protected by exclusive metadata lock, so the only possible statement > that may cause concurrency issues should be FLUSH TABLES (in fact there are > more cases, like ha_table_exists()). > 2. share->tdc.all_tables holds only tables owned by current thread (or empty), > there are assertions for this above. > 3. if concurrent FLUSH TABLES removed some TABLE instances from tdc.all_tables, > but didn't close them yet, share ref_count reflects that. > 4. this FLUSH TABLES must call intern_close_table(), which will eventually call > tdc_release_share()/mysql_cond_broadcast(). > > That's it. Okay, thanks. Got it. What did you mean "like ha_table_exists()" ? Regards, Sergei