Thanks for clarifying.
I did get the impression but there was some part of it where I thought the
doc was not clear enough.
Thanks anyway.

On Sat, May 20, 2017 at 10:46 PM, Howard Chu <[email protected]> wrote:

> Muhammed Muneer wrote:
>
>> Is the following  valid.
>>
>> 1) Read transaction 1 is started
>> 2) Read transaction 2 is started and calls mdb_dbi_open and commits
>> 3) Read transaction 1 uses the handle from (2)
>>
>
> Please learn how to read. The doc says more than you quoted before, and it
> already quite explicitly defines its properties:
>
> http://www.lmdb.tech/doc/group__internal.html#gac08cad5b0969
> 25642ca359a6d6f0562a
>
>         The database handle will be private to the current transaction
> until the transaction is successfully committed. If the transaction is
> aborted the handle will be closed automatically. After a successful commit
> the handle will reside in the shared environment, and may be used by other
> transactions.
>
> In your question above, transaction 1 is not after transaction 2 therefore
> it cannot use the handle that transaction 2 commits.
>
> The handle does not exist in the shared environment until after its
> opening transaction commits. If it doesn't exist in the shared environment
> when a transaction begins, then it is not visible or valid in that
> particular transaction.
>
> Just follow the recommendation to open all handles at the beginning of the
> program.
>
>>
>>
>> On Sat, May 20, 2017 at 6:46 PM, Muhammed Muneer <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>     Thanks.
>>
>>     On Sat, May 20, 2017 at 6:29 PM, Klaus Malorny <
>> [email protected]
>>     <mailto:[email protected]>> wrote:
>>
>>         On 5/20/17 2:02 PM, Muhammed Muneer wrote:
>>
>>             So when the doc says
>>
>>                   * The database handle will be private to the current
>>             transaction until
>>                   * the transaction is successfully committed.
>>
>>             "the handle being private" only refers to the first
>> mdb_dbi_open.
>>             Once this transaction is committed, one doesn't have to call
>> this
>>             again in subsequent concurrent transactions and can use this
>> handle.
>>             And then this handle won't be private at all.
>>
>>             Did I get it right?
>>
>>
>>         Yes. I do this exactly that way as part of my initial setup of my
>>         application. Once the transaction is committed, I use the returned
>>         handles setup from whatever thread that needs to access the
>> respective
>>         database. I never call mdb_dbi_open again after the setup.
>>
>>         Regards,
>>
>>         Klaus
>>
>>
>>
>>
>
> --
>   -- Howard Chu
>   CTO, Symas Corp.           http://www.symas.com
>   Director, Highland Sun     http://highlandsun.com/hyc/
>   Chief Architect, OpenLDAP  http://www.openldap.org/project/
>

Reply via email to