axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stadelmann Josef" <>
Subject AW: execute axiom_document_free(om_document, env); // and my hash_table key/val pairs are gone
Date Tue, 15 Jan 2008 15:39:45 GMT
Your call correct, it works now but shows a new problem, that of
freeing two of the 4 hash tables later.

freeing the om_document with
seams to work,

But freeing a builder when you think you have to free the om_document
is not so obvious; but you are righth the creator of my om_document 
is the axiom_stax_builder with its get_document.

However this allone does not solve the problem. They still exists.

Until one really does a 

	fldval = (a *) AXIS2_MALLOC(env->allocator, sizeof(a));
      fldval->value = axutil_strdup(env,getFLDVAL(ele, env));
      fldnam =        axutil_strdup(env,getFLDNAM(ele, env)); 

and used the axutil_strdup function; fldval and fldnam are then
added to the hash tables and I just hope that freeing the hash
tables deallocates this string space too; 

Here I have my doubts because when I do


only htwsinp and htwsold can bee freed, while htGWKSP and htwsout
result in a exception asking me to break or continue in VS 2005

So please here is the code used to make htGWKSP

	puts htwsinp hash table into htGWKSP, does like obbput in CORBA world
	the ponter to the golbal hash table htGWKSP is updated
axis2_bool_t AXIS2_CALL 
axawl_put(const axutil_hash_t *htwsinp, 
		  const axutil_env_t *env, 
		  const axutil_hash_t **pphtGWKSP)		//!< load Spin elements into global workspace
	axutil_hash_t *htGWKSP = NULL;
    axutil_hash_index_t *hi;

    const void *key = NULL;
    void *val = NULL;

	htGWKSP = *pphtGWKSP;
	if (htGWKSP)

	htGWKSP = axutil_hash_copy(htwsinp, env);
    printf("\n\nDump htGWKSP - a  copy    of htwsinp to htGWKSP - the traditional obbput()");
    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "%s", 
           "\n\nDump htGWKSP - a  copy    of htwsinp to htGWKSP - the traditional obbput()");
    for (hi = axutil_hash_first(htwsinp, env); hi; hi = axutil_hash_next(env, hi)) {
        axutil_hash_this(hi, &key, NULL, &val);
        printf("\nkey\t: %s", key);
        printf("\tval\t: %s", ((a *) val)->value);
        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "%s", key);
        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "%s", ((a *) val)->value);        
	(*pphtGWKSP) = htGWKSP;
	return AXIS2_SUCCESS;

Now tell me why I can not use


without getting an error raised?

And the same is true for htwsout which is a copy of htGWKSP before we return to the caller.
htwsout must be freed after reconstructing the AXIOM document and then serializing it into
the payload string to be returned from my SPg-Legacy.c server to its client through axis2.

Thanks and regards

-----Urspr√ľngliche Nachricht-----
Von: Samisa Abeysinghe []
Gesendet: Dienstag, 15. Januar 2008 15:52
An: Apache AXIS C User List
Betreff: Re: execute axiom_document_free(om_document, env); // and my
hash_table key/val pairs are gone

Senaka Fernando wrote:
> 2. Consider duplicating the strings before copying to (or from) your hash.
> You can use axutil_strdup() for this purpose.

Yes, this may solve your problems. I skimmed through the code given, and 
it looks to me you are using the shallow copies returned by the OM 
element accessor methods and store them in hashes without duplicating them.


To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message