On 2020-03-24 12:53, Vlad Khorsun wrote:
24.03.2020 9:54, Alex Peshkoff via Firebird-devel wrote:
On 2020-03-23 22:18, Dimitry Sibiryakov wrote:
Hello, All.

  Is it bug or intended?


Bug.

  Not really. I see no checks in engine against duplication of any DPB tag, it is not described in IB docs, so it is not forbidden, at least formally. But I agree, it would be better to remove old value before insert new one. Actually, it makes no harm as
engine uses value from last found tag.


insertSomething() does not guarantee to add tag in the end of a buffer (it's insert, not append) I.e. only if previous actions do set current position to eof new tag will go to the end. Relying on it is not very good idea (though may work).

Added first in Provider::generateDPB(), next in (any-)Connection::attach().
Vlad, I'm unsure - what place is correct one?

  Second was added with connections pool implementation in master. This part requires some completion. isc_dpb_ext_call_depth was introduced by me at initial implementation of EDS to detect and prevent too deep recursion within EDS. isc_dpb_ext_call_depth passed at attach() with incremented call depth counter of local attachment. Now, with connections pooling, I need a way to set call depth counter of re-used attachment. So far we have no such way and I open for suggestions. When this will be implemented, isc_dpb_ext_call_depth could be removed from Provider::generateDPB(). Currently it works as a some protection from bad scenarios with recursive calls of EDS.


It should help from infinite recursion - pools on involved servers should overflow at some step, and tag will work as before. Though certainly it's not precise result.
May be better solution is related with attachment's reset?




Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to