[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
RE: Dynamic diagnostics with new backend API
This is actually what I had in mind originally... The Connexitor code that
this design is based on does exactly that. I don't have time to follow up on
this at the moment, but it seems you have it well in hand.
-- Howard Chu
Chief Architect, Symas Corp. Director, Highland Sun
http://www.symas.com http://highlandsun.com/hyc
Symas: Premier OpenSource Development and Support
> -----Original Message-----
> From: owner-openldap-devel@OpenLDAP.org
> [mailto:owner-openldap-devel@OpenLDAP.org]On Behalf Of Pierangelo
> Masarati
> Sent: Wednesday, April 16, 2003 3:54 AM
> To: openldap-devel@OpenLDAP.org
> Subject: Dynamic diagnostics with new backend API
>
>
> Howard,
>
> what about having SlapReply structure host
> a "freeme" flag for the appropriate members
> (I'm specifically thinking of rs_text) such
> that we can dynamically allocate the diagnostics
> to make them more expressive than generic
> const strings when required? This way, the
> send_ldap_* func in charge of actually sending
> the result may free them at will (and set it back
> to NULL).
>
> I understand that if not accurately handled
> it may leak somewhere; we may require to
> allocate it within a context, or have the
> initiator of the request structure free it
> at the end if none of the appropriate routines
> used (and freed) it.
>
> This way, most of the "Internal (implementation
> specific) error (80)" messages would be accompanied
> by more meaningful messages :)
>
> Of course the same idea may be applied to other
> fields (rs_entry, rs_refs) but I don't see it
> much useful right now. We may have a single flag,
> e.g.
>
> unsigned int rs_flags;
>
> // with a set of macros like
>
> #define SR_FREE_TEXT 0x01
> #define SR_FREE_REFS 0x02
> #define SR_FREE_ENTRY 0x04
>
> // and so on,
>
> #define SLAPREPLY_MUST_FREE_TEXT(rs) ((rs)->sr_flags & SR_FREE_TEXT)
> #define SLAPREPLY_SET_TEXT_FOR_FREE(rs) ((rs)->sr_flags |=
> SR_FREE_TEXT)
> #define SLAPREPLY_UNSET_TEXT_FOR_FREE(rs) ((rs)->sr_flags &=
> ~SR_FREE_TEXT)
> #define SLAPREPLY_FREE_TEXT(rs) \
> do { \
> if (SLAPREPLY_MUST_FREE_TEXT((rs))) { \
> free((rs)->sr_text); \
> (rs)->sr_text = NULL; \
> SLAPREPLY_UNSET_TEXT_FOR_FREE((rs)); \
> while (0)
>
> and so on. Comments?
>
> Ando.
>
> --
> Pierangelo Masarati
> mailto:pierangelo.masarati@sys-net.it
>
>
>