Hi all,
as part of the v5.0.0 API fixup’s, I’d like to change the string ownership
“contract” for TSRedirectUrlSet(). Today, the incoming URL string is basically
strdup()’ed, and in most use cases I can think of, it’d be more logical to
stick to how we do other similar APIs, which is to assume the caller has
allocated the memory. This also significantly improves efficiency for many use
cases. For example, a typical plugin use case would be something like this:
url_str = TSUrlStringGet(mbuf, url, &url_len);
TSRedirectUrlSet(txn, url_str, url_len);
TSfree(url_str); // I’d like to eliminate this!
In the current implementations, this causes malloc() / strcpy() of the url_str
twice; once in the plugin, and then once again in the TSRedirectUrlSet() API.
This is a waste :). I understand this breaks implementations using this API,
but I’m still on the mindset that we should take this opportunity to improve on
the APIs in v5.0.0. We haven’t done so since v2.0, and we’ve learned a lot
since then. We will provide tools (such as the existing perl script) that helps
people migrate their plugins, and of course, all core plugins will be fixed.
I filed a Jira on this, at
https://issues.apache.org/jira/browse/TS-2693
— Leif