> Could you explain, please, semantics of addRef/release on public > provider interfaces? > > The issue was discussed on this list with two possibilities: > - when refCount = 1, release does things like detach, rollback, free, > etc. It's what was implemented so far. > - sometime mentioned also that detach/rollback/etc would not release, > and user would need to explicit call it. > > But now Vlad says we can't call release when refCount = 1, and it's just > there to decrement addRefs. > > This broke code I wrote based on discussed ideas, and I don't feel it's > correct. > > (Also note Alex code in jrd.cpp and is clear he wrote code not using > this new assumption.)
I assume there must be a kind of symmetry : attach\detach, startTx\commit, startTx\rollback, allocateStmt\freeStmt, addRef\release. From semantic POV attach\detach is like constructor\destructor pair while addRef\release should be used for additional references only (i.e. not instead of destructor). So, if code calls attach\release - this is bug, as for me, and i see no reasons to write code in this way intentionally. I consider at as very bad practice as it could lead to the inexpected side effects (such as implicit rollback). Regards, Vlad ------------------------------------------------------------------------------ Achieve unprecedented app performance and reliability What every C/C++ and Fortran developer should know. Learn how Intel has extended the reach of its next-generation tools to help boost performance applications - inlcuding clusters. http://p.sf.net/sfu/intel-dev2devmay Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel