idmap_tdb2: fix a race condition in idmap_tdb2_allocate_id().
commitf0bcef0aaa87ad14cf071acfa7984ddfa6302959
authorMichael Adam <obnox@samba.org>
Tue, 5 Aug 2008 20:38:44 +0000 (5 22:38 +0200)
committerKarolin Seeger <kseeger@samba.org>
Mon, 11 Aug 2008 14:15:29 +0000 (11 16:15 +0200)
treeb4d9c3d418df89db11fdb9bec03c341e5e654239
parentb63ddc53f2ee74ca2295554838ca7a40272dcf2f
idmap_tdb2: fix a race condition in idmap_tdb2_allocate_id().

The race is a regression introduced by the change to dbwrap.
It might have led to two concurrent processes returning the same id.

This fix is achieved by changing dbwrap_change_uint32_atomic() to
match the original behaviour of tdb_change_uint32_atomic(), which
is the following: *oldval is used as initial value when
the value does not yet exist and that the old value should be
returned in *oldval.

dbwrap_change_uint32_atomic() is used (only) in idmap_tdb2.c,
to get new ids.

Michael
(cherry picked from commit 72bd83fea7572a6202027b200d192c05023aa633)
(cherry picked from commit f3cdf9e646180837a470e90f8a17d933f07b60c3)
source/lib/dbwrap_util.c