You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Leif Hedstrom (JIRA)" <ji...@apache.org> on 2013/08/23 22:29:52 UTC
[jira] [Created] (TS-2151) Do we really need
HttpSM::_instantiate_func() now?
Leif Hedstrom created TS-2151:
---------------------------------
Summary: Do we really need HttpSM::_instantiate_func() now?
Key: TS-2151
URL: https://issues.apache.org/jira/browse/TS-2151
Project: Traffic Server
Issue Type: Improvement
Components: Core
Reporter: Leif Hedstrom
The HttpSM implements the instantiate_func() which means the Sparse Class allocator ends up trying to "optimize" the memcpy(). We should benchmark this, and see if is actually a performance improvement still. Simplifying this code with just a mempcy() (i.e. use normal class allocator behavior) would make it safer and less confusing.
{code}
void
HttpSM::_instantiate_func(HttpSM * prototype, HttpSM * new_instance)
{
int history_len = sizeof(prototype->history);
int total_len = sizeof(HttpSM);
int pre_history_len = (char *) (&(prototype->history)) - (char *) prototype;
int post_history_len = total_len - history_len - pre_history_len;
int post_offset = pre_history_len + history_len;
#ifndef SIMPLE_MEMCPY_INIT
int j;
memset(((char *) new_instance), 0, pre_history_len);
memset(((char *) new_instance) + post_offset, 0, post_history_len);
uint32_t *pd = (uint32_t *) new_instance;
for (j = 0; j < scat_count; j++) {
pd[to[j]] = val[j];
}
ink_assert((memcmp((char *) new_instance, (char *) prototype, pre_history_len) == 0) &&
(memcmp(((char *) new_instance) + post_offset, ((char *) prototype) + post_offset, post_history_len) == 0));
#else
// memcpy(new_instance, prototype, total_len);
memcpy(new_instance, prototype, pre_history_len);
memcpy(((char *) new_instance) + post_offset, ((char *) prototype) + post_offset, post_history_len);
#endif
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira