[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#7971) LMDB: Uncarefully appointment when beginning a readonly txn.
On 18/10/14 00:46, leo@yuriev.ru wrote:
> (...)
> - ti->mti_readers[i].mr_pid = pid;
> - ti->mti_readers[i].mr_tid = tid;
> + r = &ti->mti_readers[i];
> + r->mr_txnid = (txnid_t)-1;
> + r->mr_tid = tid;
> + r->mr_pid = pid; /* should be written last, see ITS#. */
> if (i == nr)
> ti->mti_numreaders = ++nr;
> /* Save numreaders for un-mutexed mdb_env_close() */
> env->me_numreaders = nr;
Actually that too is too early to set mr_pid: We must be
sure env_close() will reset it. But it is also too late,
we must get rid of any garbage value in md_pid at once
to protect it from other processes' env_close(). Fixing.
Also, I'll rename the confusingly named me_numreaders to
me_close_readers and drop some confused code using it.