On 03/14/2016 08:29 PM, Dimitry Sibiryakov wrote: > 14.03.2016 18:12, Alex Peshkoff wrote: >> But use of by name search if ID is unusable due to file not >> exists appears unavoidable. > Not true. Thread that is going to create file must do it while keeps db > list mutex.
Do you suggest to lock db list mutex from yvalve? And from network server? :) Per-db config is needed in both places. > In > this case it can be sure that no other thread can try to create the file in > parallel. > I.e. sequence like this: > > 1) create dbb with flag "creating" > 2) get list mutex > 3) create the file and get its id > 4) add the id to the list > 5) release list mutex > 6) acquire dbb init mutex > 7) make sure that "create" flag is still here > 8) continue db initialization > > Thread that do attach to database should do it in this sequence > > 1) create dbb with "init" flag > 2) open the file and get id > 3) get list mutex > 4) if the file is already in the list, drop new dbb and use old one > 5) release list mutext > 6) get dbb init mutex > 7) check that dbb has no "create" flag and throw "file not exist" (yes!) > otherwise. > 8) if dbb has "init" flag - init it, otherwise just use it. > > In this case there will be no thread races and clash. > ------------------------------------------------------------------------------ Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more. http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140 Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel