On 03/16/2012 11:51 AM, Howard Chu wrote:
Michael Ströder wrote:
HI!
What does it mean when slapd aborts with this assertion?
------------------------------------ snip
slapd: attr.c:481: attr_merge: Assertion `( nvals == ((void *)0)&& (*a)->a_nvals == (*a)->a_vals ) || ( nvals != ((void *)0)&& ( ( (*a)->a_vals == ((void *)0)&& (*a)->a_nvals == ((void *)0) ) || ( (*a)->a_nvals != (*a)->a_vals ) ) )' failed. Aborted
------------------------------------ snip
In the source code there is a FIXME remark. Does that remark mean the assertion is still not as strict as required or that the assertion might be too strict?
Maybe Ando remembers why he wrote FIXME there. Looking at the git log, the original commit was actually wrong. Ando fixed it later, perhaps he just forgot to remove the "FIXME" afterward.
I do not :), sorry. However, as far as I can recall, this was related to making sure that attributes without normalizer were treated consistently. It *should* always happen when handled by the frontend or the main backends, but occasionally, when that assert was added, there were overlays and other modules that did not, possibly because poorly maintained. For example, for quite some time seldom used pieces of code kept popping up which did not update a_numvals way after it was introduced.
Cheers, p.