On 05/16/11 23:47, Vlad Khorsun wrote:
>> On 16/05/2011 14:12, Vlad Khorsun wrote:
>>>> On 16/05/2011 13:33, Vlad Khorsun wrote:
>>>>> 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).
>>>>>
>>>> Now every provider class has a way to "release" with another methods,
>>>      Again, "release" it not how object should be finally destroyed. It is 
>>> for
>>> additional references *only*.
>>>
>> This is something new you invented.
>     You asked about semantics and i explained how i understand it. If you have
> something technical against it - show it here and we'll decide what to do.
>

Vlad, let's start with the following - why is calling release() to
remove last reference is bad?
Currently I see just one reason - error can't be reported. What if we
find a way to report an error in such case?


>> IFirebirdConf and IPluginConf, for example. They're released with release.
>     IPluginConf is not constructed explicitly from the user POV - it is 
> created
> by the Firebird and passed into user code, see :
>
>     IPluginFactory::createPlugin(IPluginConfig* factoryParameter), where
>
> user is implemented IPluginFactory interface.
>
>     IFirebirdConf also not constructed by user request as it is obtained via 
> method of IPluginConfig instance passed above  :
>     
>     IFirebirdConf* IPluginConfig::getFirebirdConf()
>
>     If you ask me why attach() and getFirebirdConf() is different - the answer
> is : by semantics. And by presence explicit "destructor" function.

Vlad, I'm afraid that this difference is not enough precise...

>  
>> The situation with new classes trying to be smart using reference 
>> counting is still almost unexplained from the POV of why that was done.
>>
>> Sure you may create artificial and specific examples of where they make 
>> things to not crash.
>>
>> But nothing except an atomic counter is currently being cared regard 
>> MT-safeness. Y-valve has internal state not synchronized, for example. 
>> Y-valve delegates call to another providers, and they do nothing re. 
>> died objects to return information.
>     This is still work in progress, i think. Probably Alex have better answer.

In FB2.5 yValve did not need any more MT-safeness except provided by
atomic counters and some helper locks like hanlers' map RwLock.
Initially I've planned to keep same approach for FB3. But I did not
review latest Adriano's changes from this POV.


------------------------------------------------------------------------------
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

Reply via email to