How does mysql decide if concurrent insert is possible for a MyISAM table? For "concurrent inserts", MySQL reference manual has the following explanation:


  The MyISAM storage engine supports concurrent inserts to reduce
  contention between readers and writers for a given table: If a MyISAM
  table has no holes in the data file (deleted rows in the middle), an
  INSERT statement can be executed to add rows to the end of the table
  at the same time that SELECT statements are reading rows from the
  table.


http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html

Let's say our database "concurrent insert" parameter is set to "Auto" (1).
And we have a MyISAM table with a gap. When we insert new rows and fill those gaps, does the table "immediately" get ready to accept "concurrent inserts" for future insert queries?

Or do we need to run "OPTIMIZE" before the table knows there are no gaps?
While you can do what Rolando suggests and set concurrent_insert=2 to always enable concurrent inserts, to answer your question about filling holes:


  we have a MyISAM table with a gap. When we insert new rows and fill those gaps, does the table "immediately" get ready to accept "concurrent inserts" for future insert queries?


Yes (emphasis mine):


  If there are holes, concurrent inserts are disabled but are enabled again automatically when all holes have been filled with new data. [src]


Disclaimer: I haven't actually tested it. It seems unless you inserted the exact same data-length in the holes, you will still have holes somewhere.

You can see if there are holes from a query such as this (data_free=0 would mean no holes):

SELECT table_name, data_free FROM information_schema.tables WHERE table_schema='FOO' AND engine='myisam'