[Date Prev][Date Next] [Chronological] [Thread] [Top]

RE: An optimization for another day (and developer)



> -----Original Message-----
> From: owner-openldap-devel@OpenLDAP.org
> [mailto:owner-openldap-devel@OpenLDAP.org]On Behalf Of Pierangelo
> Masarati

> > BTW, one optimization I intended to implement but haven't
> > the time is to allow:
> > 	struct berval bv = { 0, NULL }
> > 	struct berval *bvp = &bv;
> > 
> > 	rc = dnPretty( NULL, &dn, &bvp );
> > 	rc = dnNormalize( NULL, &dn, &bvp );
> > 
> > That is, allow call to provide, optionally, a
> > pre-allocated struct berval instead of relying
> > on the caller to malloc on up.  Of course, in
> > some cases, the existing behavior is preferred.
> 
> I note that relying on developers (I speak mostly of myself :)
> to supply a NULL pointer if alloc is required or non-NULL pointer
> if it can be safely used is dangerous: no more than five minutes
> ago I fixed this bug in back-monitor.  I'd rather use a alloc/use
> flag in an ancillary function, or radically change the API
> to accept only pre-allocated structs, which wouldn't be a big issue 
> since the big allocation takes place for the bv_val, not for the 
> struct berval.

Well, I guess my last commit counts as a radical change to the API.
Anything that lets you avoid a malloc is a Good Thing. In this case, I've
changed the filter/syntax/indexer structures to embed the struct berval
in their parent structure, instead of using a struct berval pointer.
This cuts malloc calls almost in half, with a corresponding drop in
CPU time. I will be looking thru the code for other places to make
similar changes. (The Attribute->a_vals is a good candidate for gains,
but I left it out this time 'round because that was too much to change
at once.)
  -- Howard