Hallvard B Furuseth
<h.b.furuseth@usit.uio.no> wrote:
Yes, the backend/overlay which returns an entry often owns that entry.
If you are result and modifying rs->sr_entry, rs->sr_flags describe
ownership of the entry and if it is modifiable. You can call
rs_entry2modifiable( op, rs, on /*the overlay*/ );
to ensure rs->sr_entry is modifiable. If necessary, this duplicates
the entry and frees/releases the old one. This invalidates any pointers
to/into the old sr_entry. Note how e.g. overlays/valsort.c re-reads
rs->sr_entry->e_attrs if the entry was replaced.
At other times you may prefer to duplicate an entry "by hand"
with entry_dup() to get a modifiable copy, and free it later with
entry_free() or by setting the MUSTBEFREED flag in rs->sr_flags.
If your overlay needs to free the entry in a special way, it can
set a entry release function and set the MUSTRELEASE flag to alert
other code that the entry can't just be entry_free()d.
Hey Hallvard!
Thanks a lot for your answers, they were very help full!
To be sure, when I use entry_dub(); it makes a duplication of the entry from the server cache to somewhere in the memory.
So I just need to make the pointer of the SlapReply point to my new duplicated entry,modified it as wanted,and free it once the response have been send to the client.
If, I'm multi-threading and an other request arrives it will use the entry still in the cache and not my modified duplication, is that write?
Thanks!
Johan Jakus