OK then barring further input, I guess I will replace TSMLoc with TSMsgLoc, TSUrlLoc and TSMimeFldLoc. TSHandleMLocRelease() will be removed, TSHandleMimeFldLocRelease() will be added. TS API functions that currently deal with MIME header mlocs will be changed to deal with TSMsgLoc.
Since this goes beyond adding a function to the C API, the change can't be backported into 9. Thus it won't be possible to backport https://github.com/apache/trafficserver/pull/5812 into 9. On Tue, Sep 3, 2019 at 12:14 PM Walt Karas <wka...@verizonmedia.com> wrote: > Currently a TSMLoc can be a message, a MIME header, a URL, or a MIME > header field. It does make sense to have TS API functions that operate on > a MIME header, but can also accept a message mloc and retrieve the MIME > header object from it. InkAPI.cc is able to do run-time validation that > the right sort of mloc is passed to TS API functions. So it isn't so cut > and dried that it's worth forcing all the rework to existing plugins to > break up TSMLoc into multiple types. > > On Sat, Aug 24, 2019 at 8:36 AM Alan Carroll < > solidwallofc...@verizonmedia.com> wrote: > >> I thought when we discussed this you were going to segregate these by >> type. >> One might consider splitting the current TSMLoc in to TSHdrLoc and TSMLoc, >> the latter requiring a release. I agreed with your view that it was best >> to >> have distinct types to avoid confusion about what should be passed to >> which >> API functions. >> >> On Thu, Aug 22, 2019 at 12:06 PM Walt Karas <wka...@verizonmedia.com >> .invalid> >> wrote: >> >> > Nominally, plugins are supposed to call TSHandleMLocRelease() for all >> > TSMLoc values returned by the API. But in practice it is only >> necessary to >> > call it for TSMLoc values that refer to MIME header fields: >> > >> > >> > >> https://github.com/apache/trafficserver/blob/d75af6f2eb6c63aa216111bd7f477f1f4c775580/src/traffic_server/InkAPI.cc#L2046 >> > >> > This adds significant complexity to plugin code. In some cases, the API >> > itself forces plugins to ignore the nominal need to call the release >> > function for TSMLoc values that don't refer for MIME header >> > fields. TSRemapFromUrlGet() and TSRemapToUrlGet() returns TSMLoc >> values, >> > but not a TSMBuffer value, making it impossible release the TSMLoc >> values. >> > I propose adding the API function: >> > >> > void TSMimeHdrFieldMLocRelease(TSMbuffer, TSMLoc); >> > >> >