Hi,
I am running on Windows Server 2008 R2, and using a build I made yesterday
(svn 957643) I generated code from our wsdl and ran it - it has a leak that
was also present in the 1.6.0 release.
Given this in the wsdl file:
<s:complexType name="ResponseMessageType">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Attendee"
type="tns:EmailAddress" />
<s:element minOccurs="0" maxOccurs="1" name="MessageText"
type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="ResponseCode"
type="tns:ResponseCodeType" />
<s:element minOccurs="0" maxOccurs="1" name="DescriptiveLinkKey"
type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="MessageXml">
<s:complexType>
<s:sequence>
<s:any minOccurs="0" maxOccurs="unbounded" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
<s:attribute name="ResponseClass" type="tns:ResponseClassType"
use="required" />
</s:complexType>
...
<s:simpleType name="ResponseClassType">
<s:restriction base="s:string">
<s:enumeration value="Success" />
<s:enumeration value="Warning" />
<s:enumeration value="Error" />
</s:restriction>
</s:simpleType>
the following code is generated twice - after the comments say it is
building MessageText, the value it is comparing to 'key' is
"nil|http://www.w3.org/2001/XMLSchema-instance" and after the comments say
it is building MessageXml, the value it is comparing to 'key' is
"ResponseClass", like this:
attrib_text = NULL;
if(attribute_hash)
{
axutil_hash_index_t *hi;
void *val;
const void *key;
for (hi = axutil_hash_first(attribute_hash, env); hi;
hi = axutil_hash_next(env, hi))
{
axutil_hash_this(hi, &key, NULL, &val);
if(!strcmp((axis2_char_t*)key,
"ResponseClass"))
{
parent_attri = (axiom_attribute_t*)val;
break;
}
}
}
The leak can be fixed by making the body of the for loop look like this:
attrib_text = NULL;
if(attribute_hash)
{
axutil_hash_index_t *hi;
void *val;
const void *key;
for (hi = axutil_hash_first(attribute_hash, env); hi;
hi = axutil_hash_next(env, hi))
{
axutil_hash_this(hi, &key, NULL, &val);
if(!strcmp((axis2_char_t*)key,
"ResponseClass"))
{
parent_attri = (axiom_attribute_t*)val;
AXIS2_FREE(env->allocator, hi);
// hi normally deleted when axutil_hash_next comes to end
break;
}
if (val)
{
AXIS2_FREE(env->allocator, val);
}
}
}
Regards,
Steve
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]