You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ma...@apache.org on 2007/06/11 11:42:43 UTC

svn commit: r546062 - in /webservices/axis2/trunk/c/neethi: include/ src/ src/secpolicy/builder/ src/secpolicy/model/

Author: manjula
Date: Mon Jun 11 02:42:41 2007
New Revision: 546062

URL: http://svn.apache.org/viewvc?view=rev&rev=546062
Log:
Fixing memory leaks by keeping a ref count.

Modified:
    webservices/axis2/trunk/c/neethi/include/neethi_operator.h
    webservices/axis2/trunk/c/neethi/include/neethi_policy.h
    webservices/axis2/trunk/c/neethi/include/rp_algorithmsuite.h
    webservices/axis2/trunk/c/neethi/include/rp_layout.h
    webservices/axis2/trunk/c/neethi/include/rp_property.h
    webservices/axis2/trunk/c/neethi/include/rp_supporting_tokens.h
    webservices/axis2/trunk/c/neethi/include/rp_username_token.h
    webservices/axis2/trunk/c/neethi/include/rp_wss10.h
    webservices/axis2/trunk/c/neethi/include/rp_x509_token.h
    webservices/axis2/trunk/c/neethi/src/all.c
    webservices/axis2/trunk/c/neethi/src/assertion.c
    webservices/axis2/trunk/c/neethi/src/engine.c
    webservices/axis2/trunk/c/neethi/src/exactlyone.c
    webservices/axis2/trunk/c/neethi/src/operator.c
    webservices/axis2/trunk/c/neethi/src/policy.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/asymmetric_binding_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/initiator_token_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/layout_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/recipient_token_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/supporting_tokens_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_binding_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_token_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/username_token_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/wss10_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/builder/x509_token_builder.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/algorithmsuite.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/asymmetric_binding.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/binding_commons.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/layout.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/property.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/supporting_tokens.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/ut.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/wss10.c
    webservices/axis2/trunk/c/neethi/src/secpolicy/model/x509_token.c

Modified: webservices/axis2/trunk/c/neethi/include/neethi_operator.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/neethi_operator.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/neethi_operator.h (original)
+++ webservices/axis2/trunk/c/neethi/include/neethi_operator.h Mon Jun 11 02:42:41 2007
@@ -80,6 +80,10 @@
             neethi_operator_t *neethi_operator,
             const axutil_env_t *env);
     
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    neethi_operator_increment_ref(
+        neethi_operator_t *neethi_operator,
+        const axutil_env_t *env);
 
 
     /** @} */

Modified: webservices/axis2/trunk/c/neethi/include/neethi_policy.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/neethi_policy.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/neethi_policy.h (original)
+++ webservices/axis2/trunk/c/neethi/include/neethi_policy.h Mon Jun 11 02:42:41 2007
@@ -106,7 +106,7 @@
         neethi_policy_set_components_null(
             neethi_policy_t *policy,
             const axutil_env_t *env);
-        
+
 
     /** @} */
 #ifdef __cplusplus

Modified: webservices/axis2/trunk/c/neethi/include/rp_algorithmsuite.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_algorithmsuite.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_algorithmsuite.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_algorithmsuite.h Mon Jun 11 02:42:41 2007
@@ -169,6 +169,11 @@
                                 const axutil_env_t *env,
                                 axis2_char_t *xpath);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_algorithmsuite_increment_ref(rp_algorithmsuite_t *algorithmsuite,
+                                    const axutil_env_t *env);
+    
+
 #ifdef __cplusplus
 }
 #endif

Modified: webservices/axis2/trunk/c/neethi/include/rp_layout.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_layout.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_layout.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_layout.h Mon Jun 11 02:42:41 2007
@@ -47,6 +47,11 @@
                         const axutil_env_t *env,
                         axis2_char_t *value);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_layout_increment_ref(rp_layout_t *layout,
+                            const axutil_env_t *env);
+    
+
 #ifdef __cplusplus
 }
 #endif

Modified: webservices/axis2/trunk/c/neethi/include/rp_property.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_property.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_property.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_property.h Mon Jun 11 02:42:41 2007
@@ -61,6 +61,12 @@
         rp_property_t *property,
         const axutil_env_t *env);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_property_increment_ref(rp_property_t *property,
+        const axutil_env_t *env);
+    
+
+
 #ifdef __cplusplus
 }
 #endif

Modified: webservices/axis2/trunk/c/neethi/include/rp_supporting_tokens.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_supporting_tokens.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_supporting_tokens.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_supporting_tokens.h Mon Jun 11 02:42:41 2007
@@ -111,6 +111,11 @@
                                   const axutil_env_t *env,
                                   int type);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_supporting_tokens_increment_ref(rp_supporting_tokens_t *supporting_tokens,
+                                       const axutil_env_t *env);
+    
+
 
 #ifdef __cplusplus
 }

Modified: webservices/axis2/trunk/c/neethi/include/rp_username_token.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_username_token.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_username_token.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_username_token.h Mon Jun 11 02:42:41 2007
@@ -83,6 +83,12 @@
         const axutil_env_t *env,
         axis2_bool_t useUTprofile11);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_username_token_increment_ref(
+        rp_username_token_t *username_token,
+        const axutil_env_t *env);
+    
+
 #ifdef __cplusplus
 }
 #endif

Modified: webservices/axis2/trunk/c/neethi/include/rp_wss10.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_wss10.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_wss10.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_wss10.h Mon Jun 11 02:42:41 2007
@@ -74,6 +74,11 @@
             const axutil_env_t *env,
             axis2_bool_t must_support_ref_embedded_token);
 
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_wss10_increment_ref(rp_wss10_t *wss10,
+            const axutil_env_t *env);
+
+
 #ifdef __cplusplus
 }
 #endif

Modified: webservices/axis2/trunk/c/neethi/include/rp_x509_token.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/include/rp_x509_token.h?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/include/rp_x509_token.h (original)
+++ webservices/axis2/trunk/c/neethi/include/rp_x509_token.h Mon Jun 11 02:42:41 2007
@@ -101,8 +101,10 @@
             const axutil_env_t *env,
             axis2_char_t *token_version_and_type);
 
-
-
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    rp_x509_token_increment_ref(rp_x509_token_t *x509_token,
+            const axutil_env_t *env);
+    
 
 #ifdef __cplusplus
 }

Modified: webservices/axis2/trunk/c/neethi/src/all.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/all.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/all.c (original)
+++ webservices/axis2/trunk/c/neethi/src/all.c Mon Jun 11 02:42:41 2007
@@ -67,7 +67,7 @@
             {
                 neethi_operator_t *operator = NULL;
                 operator = (neethi_operator_t *)
-                    axutil_array_list_get(neethi_all->policy_components,env, i);
+                    axutil_array_list_get(neethi_all->policy_components, env, i);
                 if (operator)
                     neethi_operator_free(operator, env);
 
@@ -76,7 +76,7 @@
             axutil_array_list_free(neethi_all->policy_components , env);
             neethi_all->policy_components = NULL;
         }
-        AXIS2_FREE(env->allocator,neethi_all);
+        AXIS2_FREE(env->allocator, neethi_all);
         neethi_all = NULL;
     }
     return;
@@ -112,7 +112,8 @@
     {
         void *value = NULL;
         value = axutil_array_list_get(arraylist ,env ,i);
-        axutil_array_list_add(all->policy_components,env,value);
+        neethi_operator_increment_ref((neethi_operator_t *)value, env);
+        axutil_array_list_add(all->policy_components, env, value);
     }
     return AXIS2_SUCCESS;
 }
@@ -126,7 +127,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
-    axutil_array_list_add(neethi_all->policy_components,env,operator);
+    neethi_operator_increment_ref(operator, env);
+    axutil_array_list_add(neethi_all->policy_components, env, operator);
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/axis2/trunk/c/neethi/src/assertion.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/assertion.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/assertion.c (original)
+++ webservices/axis2/trunk/c/neethi/src/assertion.c Mon Jun 11 02:42:41 2007
@@ -18,6 +18,13 @@
 
 
 #include <neethi_assertion.h>
+#include <rp_x509_token.h>
+#include <rp_property.h>
+#include <rp_layout.h>
+#include <rp_algorithmsuite.h>
+#include <rp_wss10.h>
+#include <rp_supporting_tokens.h>
+#include <rp_username_token.h>
 
 struct neethi_assertion_t
 {
@@ -92,6 +99,40 @@
         AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         return NULL;
     }
+
+    if(type == ASSERTION_TYPE_X509_TOKEN)
+    {
+        rp_x509_token_increment_ref((rp_x509_token_t *)value, env);
+    }
+    if(type == ASSERTION_TYPE_INITIATOR_TOKEN)
+    {
+        rp_property_increment_ref((rp_property_t *)value, env);
+    }    
+    if(type == ASSERTION_TYPE_RECIPIENT_TOKEN)
+    {
+        rp_property_increment_ref((rp_property_t *)value, env);
+    }
+    if(type == ASSERTION_TYPE_LAYOUT)
+    {
+        rp_layout_increment_ref((rp_layout_t *)value, env);
+    }
+    if(type == ASSERTION_TYPE_ALGORITHM_SUITE)
+    {
+        rp_algorithmsuite_increment_ref((rp_algorithmsuite_t *)value, env);
+    }
+    if(type == ASSERTION_TYPE_WSS10)
+    {
+        rp_wss10_increment_ref((rp_wss10_t *)value, env);
+    }
+    if(type == ASSERTION_TYPE_SUPPORTING_TOKENS)
+    {
+        rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env);
+    }
+    if(type == ASSERTION_TYPE_USERNAME_TOKEN)
+    {
+        rp_username_token_increment_ref((rp_username_token_t *)value, env);
+    }
+
     neethi_assertion->value = value;
     neethi_assertion->type = type;
     neethi_assertion->element = NULL;
@@ -122,13 +163,13 @@
             {
                 neethi_operator_t *operator = NULL;
                 operator = (neethi_operator_t *)
-                    axutil_array_list_get(neethi_assertion->policy_components,env, i);
+                    axutil_array_list_get(neethi_assertion->policy_components, env, i);
                 if (operator)
                     neethi_operator_free(operator, env);
 
                 operator = NULL;
             }
-            axutil_array_list_free(neethi_assertion->policy_components , env);
+            axutil_array_list_free(neethi_assertion->policy_components, env);
             neethi_assertion->policy_components = NULL;
         }
         if(neethi_assertion->value)
@@ -138,7 +179,7 @@
                 neethi_assertion->free_func(neethi_assertion->value, env);
             }
         }
-        AXIS2_FREE(env->allocator,neethi_assertion);
+        AXIS2_FREE(env->allocator, neethi_assertion);
         neethi_assertion = NULL;
     }
     return;
@@ -174,6 +215,10 @@
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
     neethi_assertion->type = type;
+    if(type == ASSERTION_TYPE_X509_TOKEN)
+    {
+        rp_x509_token_increment_ref((rp_x509_token_t *)value, env);
+    }    
     neethi_assertion->value =(void *)value;
 
     return AXIS2_SUCCESS;
@@ -270,7 +315,8 @@
     {
         void *value = NULL;
         value = axutil_array_list_get(arraylist ,env ,i);
-        axutil_array_list_add(neethi_assertion->policy_components,env,value);
+        neethi_operator_increment_ref((neethi_operator_t *)value, env);
+        axutil_array_list_add(neethi_assertion->policy_components, env, value);
     }
     return AXIS2_SUCCESS;
 }
@@ -282,7 +328,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
-    axutil_array_list_add(neethi_assertion->policy_components,env,operator);
+    neethi_operator_increment_ref(operator, env);
+    axutil_array_list_add(neethi_assertion->policy_components, env, operator);
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/axis2/trunk/c/neethi/src/engine.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/engine.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/engine.c (original)
+++ webservices/axis2/trunk/c/neethi/src/engine.c Mon Jun 11 02:42:41 2007
@@ -116,14 +116,13 @@
     {
         return NULL;
     }        
-    neethi_operator_set_value(neethi_operator,env,all,OPERATOR_TYPE_ALL);
-    process_operation_element(env,neethi_operator,node,element);
+    neethi_operator_set_value(neethi_operator, env, all, OPERATOR_TYPE_ALL);
+    process_operation_element(env, neethi_operator, node, element);
 
     neethi_operator_set_value_null(neethi_operator, env);
-
     neethi_operator_free(neethi_operator, env);
     neethi_operator = NULL;
-    
+
     return all;
 }   
 
@@ -150,7 +149,6 @@
     process_operation_element(env,neethi_operator,node,element);
 
     neethi_operator_set_value_null(neethi_operator, env);
-
     neethi_operator_free(neethi_operator, env);
     neethi_operator = NULL;
 
@@ -208,11 +206,10 @@
     {
         return NULL;
     }        
-    neethi_operator_set_value(neethi_operator,env,neethi_policy,OPERATOR_TYPE_POLICY);
-    process_operation_element(env,neethi_operator,node,element);  
+    neethi_operator_set_value(neethi_operator, env, neethi_policy, OPERATOR_TYPE_POLICY);
+    process_operation_element(env, neethi_operator, node, element);
 
     neethi_operator_set_value_null(neethi_operator, env);
-    
     neethi_operator_free(neethi_operator, env);
     neethi_operator = NULL;
 
@@ -233,8 +230,8 @@
     axiom_children_iterator_t *children_iter = NULL;
     void *value = NULL;
 
-    type = neethi_operator_get_type(neethi_operator,env);
-    value = neethi_operator_get_value(neethi_operator,env);
+    type = neethi_operator_get_type(neethi_operator, env);
+    value = neethi_operator_get_value(neethi_operator, env);
     if(type == OPERATOR_TYPE_POLICY)
     {
         /*Adding attribute values to the hashmap logic
@@ -305,31 +302,31 @@
                         {                            
                             if(axutil_strcmp(local_name,NEETHI_POLICY)==0)
                             {
-                                neethi_policy_t *neethi_policy = get_operator_neethi_policy(env,child_node,child_element);
+                                neethi_policy_t *neethi_policy = get_operator_neethi_policy(env, child_node, child_element);
                                 operator = neethi_operator_create(env);
-                                neethi_operator_set_value(operator,env,neethi_policy,OPERATOR_TYPE_POLICY);
-                                neethi_engine_add_policy_component(env,neethi_operator,operator);
+                                neethi_operator_set_value(operator, env, neethi_policy, OPERATOR_TYPE_POLICY);
+                                neethi_engine_add_policy_component(env, neethi_operator, operator);
                             }
                             else if(axutil_strcmp(local_name,NEETHI_ALL)==0)
                             {
-                                neethi_all_t *all = get_operator_all(env,child_node,child_element);
+                                neethi_all_t *all = get_operator_all(env, child_node, child_element);
                                 operator = neethi_operator_create(env);
-                                neethi_operator_set_value(operator,env,all,OPERATOR_TYPE_ALL);
-                                neethi_engine_add_policy_component(env,neethi_operator,operator);
+                                neethi_operator_set_value(operator,env, all, OPERATOR_TYPE_ALL);
+                                neethi_engine_add_policy_component(env, neethi_operator, operator);
                             }
                             else if(axutil_strcmp(local_name,NEETHI_EXACTLYONE)==0)
                             {
-                                neethi_exactlyone_t *exactlyone = get_operator_exactlyone(env,child_node,child_element);
+                                neethi_exactlyone_t *exactlyone = get_operator_exactlyone(env, child_node, child_element);
                                 operator = neethi_operator_create(env);
-                                neethi_operator_set_value(operator,env,exactlyone,OPERATOR_TYPE_EXACTLYONE);
-                                neethi_engine_add_policy_component(env,neethi_operator,operator);
+                                neethi_operator_set_value(operator, env, exactlyone, OPERATOR_TYPE_EXACTLYONE);
+                                neethi_engine_add_policy_component(env, neethi_operator, operator);
                             }
                             else if(axutil_strcmp(local_name,NEETHI_REFERENCE)==0)
                             {
-                                neethi_reference_t *reference = get_operator_reference(env,child_node,child_element);
+                                neethi_reference_t *reference = get_operator_reference(env, child_node, child_element);
                                 operator = neethi_operator_create(env);
-                                neethi_operator_set_value(operator,env,reference,OPERATOR_TYPE_REFERENCE);
-                                neethi_engine_add_policy_component(env,neethi_operator,operator);
+                                neethi_operator_set_value(operator, env, reference, OPERATOR_TYPE_REFERENCE);
+                                neethi_engine_add_policy_component(env, neethi_operator, operator);
                             }
                         }                            
                         else
@@ -337,7 +334,7 @@
                             neethi_assertion_t *assertion = neethi_assertion_builder_build(env, child_node, child_element);
                             operator = neethi_operator_create(env);
                             neethi_operator_set_value(operator, env, assertion, OPERATOR_TYPE_ASSERTION);
-                            neethi_engine_add_policy_component(env,neethi_operator,operator);
+                            neethi_engine_add_policy_component(env, neethi_operator, operator);
                         }                            
                     }
                 }
@@ -362,8 +359,8 @@
     neethi_all_t *all = NULL;
     neethi_assertion_t *assertion = NULL;
 
-    type = neethi_operator_get_type(container_operator,env);
-    value = neethi_operator_get_value(container_operator,env);        
+    type = neethi_operator_get_type(container_operator, env);
+    value = neethi_operator_get_value(container_operator, env);        
     
     if(value)
     {
@@ -371,19 +368,19 @@
         {
             case OPERATOR_TYPE_POLICY:
                 neethi_policy = (neethi_policy_t *)value;
-                neethi_policy_add_operator(neethi_policy,env,component);   
+                neethi_policy_add_operator(neethi_policy, env, component);   
                 /*printf("neethi_policy\n");*/
                 break;
 
             case OPERATOR_TYPE_ALL:
                 all = (neethi_all_t *)value;
-                neethi_all_add_operator(all,env,component);
+                neethi_all_add_operator(all, env, component);
                 /*printf("all\n");*/
                 break;
 
             case OPERATOR_TYPE_EXACTLYONE:
                 exactlyone = (neethi_exactlyone_t *)value;
-                neethi_exactlyone_add_operator(exactlyone,env,component);
+                neethi_exactlyone_add_operator(exactlyone, env, component);
                 /*printf("exactlyone\n");*/
                 break;
 
@@ -477,20 +474,19 @@
     }        
 
     operator = neethi_operator_create(env);
-    neethi_operator_set_value(operator,env,neethi_policy,OPERATOR_TYPE_POLICY);
+    neethi_operator_set_value(operator, env, neethi_policy, OPERATOR_TYPE_POLICY);
 
-    exactlyone = normalize_operator(operator,registry,deep,env);
+    exactlyone = normalize_operator(operator, registry, deep, env);
 
     neethi_operator_set_value_null(operator, env);
-
     neethi_operator_free(operator, env);
     operator = NULL;
-
+   
     if(exactlyone)
     {
         component = neethi_operator_create(env);
-        neethi_operator_set_value(component,env,exactlyone,OPERATOR_TYPE_EXACTLYONE);
-        neethi_policy_add_operator(resultant_neethi_policy,env,component);
+        neethi_operator_set_value(component, env, exactlyone, OPERATOR_TYPE_EXACTLYONE);
+        neethi_policy_add_operator(resultant_neethi_policy, env, component);
         
         /*check_neethi_policy(resultant_neethi_policy,env);*/
         return resultant_neethi_policy;
@@ -511,21 +507,21 @@
     neethi_policy_t *neethi_policy = NULL;
     neethi_operator_t *component = NULL;
 
-    exactlyone1 = neethi_policy_get_exactlyone(neethi_policy1,env);
-    exactlyone2 = neethi_policy_get_exactlyone(neethi_policy2,env);    
+    exactlyone1 = neethi_policy_get_exactlyone(neethi_policy1, env);
+    exactlyone2 = neethi_policy_get_exactlyone(neethi_policy2, env);    
 
     if(!exactlyone1 || !exactlyone2)
     {
         /*printf("Merged fail Input wrong \n");*/
         return NULL;
     }
-    exactlyone = get_cross_product(exactlyone1,exactlyone2,env);
+    exactlyone = get_cross_product(exactlyone1, exactlyone2, env);
     
     neethi_policy = neethi_policy_create(env);
 
     component = neethi_operator_create(env);
-    neethi_operator_set_value(component,env,exactlyone,OPERATOR_TYPE_EXACTLYONE);
-    neethi_policy_add_operator(neethi_policy,env,component);
+    neethi_operator_set_value(component, env, exactlyone, OPERATOR_TYPE_EXACTLYONE);
+    neethi_policy_add_operator(neethi_policy, env, component);
 
     return neethi_policy;
 }
@@ -651,9 +647,9 @@
     axutil_array_list_t *arraylist = NULL;
     int i = 0;
 
-    neethi_operator_type_t type = neethi_operator_get_type(operator,env);
+    neethi_operator_type_t type = neethi_operator_get_type(operator, env);
     
-    if(operator_is_empty(operator,env))
+    if(operator_is_empty(operator, env))
     {
         neethi_exactlyone_t *exactlyone = NULL;
         exactlyone = neethi_exactlyone_create(env);
@@ -663,20 +659,20 @@
             neethi_operator_t *component = NULL;
             all = neethi_all_create(env);
             component = neethi_operator_create(env);
-            neethi_operator_set_value(component,env,all,OPERATOR_TYPE_ALL);
-            neethi_exactlyone_add_operator(exactlyone,env,component);
+            neethi_operator_set_value(component, env, all, OPERATOR_TYPE_ALL);
+            neethi_exactlyone_add_operator(exactlyone, env, component);
         }                        
         return exactlyone;
     }
     
-    child_component_list = axutil_array_list_create(env,0);     
-    arraylist = operator_get_components(operator,env);
+    child_component_list = axutil_array_list_create(env, 0);     
+    arraylist = operator_get_components(operator, env);
 
-    for (i = 0; i < axutil_array_list_size(arraylist,env); i++)
+    for (i = 0; i < axutil_array_list_size(arraylist, env); i++)
     {
         neethi_operator_type_t component_type;
         child_component = (neethi_operator_t *)axutil_array_list_get(arraylist ,env ,i);
-        component_type = neethi_operator_get_type(child_component,env);
+        component_type = neethi_operator_get_type(child_component, env);
         
         if(component_type == OPERATOR_TYPE_ASSERTION)
         {
@@ -697,7 +693,7 @@
                 op = neethi_operator_create(env);
 
                 neethi_all_add_operator(all, env, child_component);
-                neethi_operator_set_value(op, env, all,OPERATOR_TYPE_ALL);
+                neethi_operator_set_value(op, env, all, OPERATOR_TYPE_ALL);
                 neethi_exactlyone_add_operator(exactlyone, env, op);
                 axutil_array_list_add(child_component_list, env, exactlyone);
             }                
@@ -711,15 +707,13 @@
             neethi_exactlyone_t *exactlyone = NULL;
 
             all = neethi_all_create(env);
-            neethi_policy = (neethi_policy_t *)neethi_operator_get_value(child_component,env);
-            children =  neethi_policy_get_policy_components(neethi_policy,env);
-            neethi_all_add_policy_components(all,children,env);
-            axutil_array_list_free(children, env);
-            children = NULL;
+            neethi_policy = (neethi_policy_t *)neethi_operator_get_value(child_component, env);
+            children =  neethi_policy_get_policy_components(neethi_policy, env);
+            neethi_all_add_policy_components(all, children, env);
             to_normalize = neethi_operator_create(env);
-            neethi_operator_set_value(to_normalize,env,all,OPERATOR_TYPE_ALL);
-            exactlyone = normalize_operator(to_normalize,registry,deep,env);
-            axutil_array_list_add(child_component_list,env,exactlyone);                    
+            neethi_operator_set_value(to_normalize, env, all, OPERATOR_TYPE_ALL);
+            exactlyone = normalize_operator(to_normalize, registry, deep, env);
+            axutil_array_list_add(child_component_list, env, exactlyone);                    
         }
         else if(component_type == OPERATOR_TYPE_REFERENCE)
         {
@@ -747,26 +741,23 @@
             neethi_operator_set_value(child_component, env, policy, OPERATOR_TYPE_POLICY);
 
             all = neethi_all_create(env);
-            policy = (neethi_policy_t *)neethi_operator_get_value(child_component,env);
-            children =  neethi_policy_get_policy_components(policy,env);
-            neethi_all_add_policy_components(all,children,env);
-            axutil_array_list_free(children, env);
-            children = NULL;
+            policy = (neethi_policy_t *)neethi_operator_get_value(child_component, env);
+            children =  neethi_policy_get_policy_components(policy, env);
+            neethi_all_add_policy_components(all, children, env);
             to_normalize = neethi_operator_create(env);
-            neethi_operator_set_value(to_normalize,env,all,OPERATOR_TYPE_ALL);
-            exactlyone = normalize_operator(to_normalize,registry,deep,env);
-            axutil_array_list_add(child_component_list,env,exactlyone);
+            neethi_operator_set_value(to_normalize, env, all, OPERATOR_TYPE_ALL);
+            exactlyone = normalize_operator(to_normalize, registry, deep, env);
+            axutil_array_list_add(child_component_list, env, exactlyone);
         }            
         else
         {
             neethi_exactlyone_t *exactlyone = NULL;
-            exactlyone = normalize_operator(child_component,registry,deep,env);
-            axutil_array_list_add(child_component_list,env,exactlyone);
+            exactlyone = normalize_operator(child_component, registry, deep, env);
+            axutil_array_list_add(child_component_list, env, exactlyone);
         }
     }
-    axutil_array_list_free(arraylist, env);
-    arraylist = NULL;
-    return compute_resultant_component(child_component_list,type,env);
+
+    return compute_resultant_component(child_component_list, type, env);
 }
 
 
@@ -777,7 +768,7 @@
     const axutil_env_t *env)
 {
     neethi_exactlyone_t *exactlyone = NULL;
-    exactlyone = neethi_exactlyone_create(env);
+    /*exactlyone = neethi_exactlyone_create(env);*/
 
     if(type == OPERATOR_TYPE_EXACTLYONE)
     {
@@ -786,57 +777,54 @@
         
         for(i=0; i<axutil_array_list_size(normalized_inner_components,env); i++ )
         {
-            inner_exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components,env,i);
+            inner_exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components, env, i);
             neethi_exactlyone_add_policy_components(exactlyone,
-                           neethi_exactlyone_get_policy_components(inner_exactlyone,env),env);
+                           neethi_exactlyone_get_policy_components(inner_exactlyone, env), env);
             
         }
-        /*axutil_array_list_free(normalized_inner_components, env);
-        normalized_inner_components = NULL;*/
     }
     else if(type == OPERATOR_TYPE_POLICY ||
                 type == OPERATOR_TYPE_ALL)
     {
-        if(axutil_array_list_size(normalized_inner_components,env)>1)
+        if(axutil_array_list_size(normalized_inner_components, env)>1)
         {
             int i = 0;
-            exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components,env,0);
-            if(!neethi_exactlyone_is_empty(exactlyone,env))
+            exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components, env, 0);
+            if(!neethi_exactlyone_is_empty(exactlyone, env))
             {
                 neethi_exactlyone_t *current_exactlyone = NULL;
                 i = 1;
-                for(i=1; i<axutil_array_list_size(normalized_inner_components,env); i++)
+                for(i=1; i<axutil_array_list_size(normalized_inner_components, env); i++)
                 {
-                    current_exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components,env,i);
-                    if(neethi_exactlyone_is_empty(current_exactlyone,env)) 
+                    current_exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components, env, i);
+                    if(neethi_exactlyone_is_empty(current_exactlyone, env)) 
                     {
                         exactlyone = current_exactlyone;
                         break;    
                     } 
                     else
                     {
-                        neethi_exactlyone_t *old_exactlyone = NULL;
-                        old_exactlyone = exactlyone;
-                        exactlyone = get_cross_product(exactlyone,current_exactlyone,env);
-                        neethi_exactlyone_set_components_null(old_exactlyone, env);
-                        neethi_exactlyone_free(old_exactlyone, env);
-                        old_exactlyone = NULL;
+                        neethi_exactlyone_t *temp = NULL;
+                        neethi_exactlyone_t *temp1 = NULL;
+                        temp = exactlyone;
+                        temp1 = current_exactlyone;
+                        exactlyone = get_cross_product(exactlyone, current_exactlyone, env);
+                        neethi_exactlyone_free(temp, env);
+                        neethi_exactlyone_free(temp1, env);
+                        temp = NULL;
+                        temp1 = NULL;
                     }
                 }
             }
         }
         else
         {
-            neethi_exactlyone_t *temp = NULL;
-            temp = exactlyone;
-            exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components,env,0);   
-            /*neethi_exactlyone_set_components_null(temp, env);*/
-            neethi_exactlyone_free(temp, env);
-            temp = NULL;
+            exactlyone = (neethi_exactlyone_t *)axutil_array_list_get(normalized_inner_components, env, 0);   
         }
     }
     axutil_array_list_free(normalized_inner_components, env);
-    normalized_inner_components = NULL;            
+    normalized_inner_components = NULL;
+    
     return exactlyone;
 }
 
@@ -858,29 +846,29 @@
     int j = 0;
 
     cross_product = neethi_exactlyone_create(env);
-    array_list1 = neethi_exactlyone_get_policy_components(exactlyone1,env);
-    array_list2 = neethi_exactlyone_get_policy_components(exactlyone2,env);
+    array_list1 = neethi_exactlyone_get_policy_components(exactlyone1, env);
+    array_list2 = neethi_exactlyone_get_policy_components(exactlyone2, env);
 
-    for(i=0; i<axutil_array_list_size(array_list1,env); i++)
+    for(i=0; i<axutil_array_list_size(array_list1, env); i++)
     {
         current_all1 = (neethi_all_t *)neethi_operator_get_value(
-           (neethi_operator_t *)axutil_array_list_get(array_list1,env,i), env );
+           (neethi_operator_t *)axutil_array_list_get(array_list1, env, i), env );
         
         for(j=0; j<axutil_array_list_size(array_list2,env); j++ )
         {
             current_all2 = (neethi_all_t *)neethi_operator_get_value(
-                (neethi_operator_t *)axutil_array_list_get(array_list2,env,j), env );
+                (neethi_operator_t *)axutil_array_list_get(array_list2, env, j), env);
             
             cross_product_all = neethi_all_create(env);
             neethi_all_add_policy_components(cross_product_all,
-                           neethi_all_get_policy_components(current_all1,env),env);
+                           neethi_all_get_policy_components(current_all1, env), env);
             
             neethi_all_add_policy_components(cross_product_all,
-                           neethi_all_get_policy_components(current_all2,env),env);
+                           neethi_all_get_policy_components(current_all2, env), env);
             
             component = neethi_operator_create(env);
-            neethi_operator_set_value(component,env,cross_product_all,OPERATOR_TYPE_ALL);
-            neethi_exactlyone_add_operator(cross_product,env,component);
+            neethi_operator_set_value(component, env, cross_product_all, OPERATOR_TYPE_ALL);
+            neethi_exactlyone_add_operator(cross_product, env, component);
         }
 
     }

Modified: webservices/axis2/trunk/c/neethi/src/exactlyone.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/exactlyone.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/exactlyone.c (original)
+++ webservices/axis2/trunk/c/neethi/src/exactlyone.c Mon Jun 11 02:42:41 2007
@@ -67,16 +67,16 @@
             {
                 neethi_operator_t *operator = NULL;
                 operator = (neethi_operator_t *)
-                    axutil_array_list_get(neethi_exactlyone->policy_components,env, i);
+                    axutil_array_list_get(neethi_exactlyone->policy_components, env, i);
                 if (operator)
                     neethi_operator_free(operator, env);
 
                 operator = NULL;
             }
-            axutil_array_list_free(neethi_exactlyone->policy_components , env);
+            axutil_array_list_free(neethi_exactlyone->policy_components, env);
             neethi_exactlyone->policy_components = NULL;
         }
-        AXIS2_FREE(env->allocator,neethi_exactlyone);
+        AXIS2_FREE(env->allocator, neethi_exactlyone);
         neethi_exactlyone = NULL;
     }
     return;
@@ -103,7 +103,7 @@
         const axutil_env_t *env)
 {
 
-    int size = axutil_array_list_size(arraylist,env);
+    int size = axutil_array_list_size(arraylist, env);
     int i = 0;
 
     if (axutil_array_list_ensure_capacity(exactlyone->policy_components , env, size + 1) != AXIS2_SUCCESS)
@@ -113,7 +113,8 @@
     {
         void *value = NULL;
         value = axutil_array_list_get(arraylist ,env ,i);
-        axutil_array_list_add(exactlyone->policy_components,env,value);
+        neethi_operator_increment_ref((neethi_operator_t *)value, env);
+        axutil_array_list_add(exactlyone->policy_components, env, value);
     }
     return AXIS2_SUCCESS;
 }
@@ -126,7 +127,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
-    axutil_array_list_add(neethi_exactlyone->policy_components,env,operator);
+    neethi_operator_increment_ref(operator, env);
+    axutil_array_list_add(neethi_exactlyone->policy_components, env, operator);
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/axis2/trunk/c/neethi/src/operator.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/operator.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/operator.c (original)
+++ webservices/axis2/trunk/c/neethi/src/operator.c Mon Jun 11 02:42:41 2007
@@ -28,7 +28,7 @@
 {
     void *value;
     neethi_operator_type_t type;
-
+    int ref;
 };
 
 AXIS2_EXTERN neethi_operator_t *AXIS2_CALL 
@@ -48,6 +48,7 @@
     }
     neethi_operator->value = NULL;
     neethi_operator->type = OPERATOR_TYPE_UNKNOWN;
+    neethi_operator->ref = 0;
     return neethi_operator;
 
 }
@@ -60,6 +61,11 @@
     
     if(neethi_operator)
     {
+        if (--(neethi_operator->ref) > 0)
+        {
+            return;
+        }
+               
         if(neethi_operator->value)
         {
             switch(neethi_operator->type)
@@ -201,3 +207,11 @@
     return AXIS2_SUCCESS;
 }
 
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+neethi_operator_increment_ref(neethi_operator_t *operator,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    operator->ref++;
+    return AXIS2_SUCCESS;
+}

Modified: webservices/axis2/trunk/c/neethi/src/policy.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/policy.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/policy.c (original)
+++ webservices/axis2/trunk/c/neethi/src/policy.c Mon Jun 11 02:42:41 2007
@@ -77,6 +77,7 @@
 
     if(neethi_policy)
     {
+
         if(neethi_policy->policy_components)
         {
             int i = 0;
@@ -94,7 +95,7 @@
             axutil_array_list_free(neethi_policy->policy_components , env);
             neethi_policy->policy_components = NULL;
         }
-        AXIS2_FREE(env->allocator,neethi_policy);
+        AXIS2_FREE(env->allocator, neethi_policy);
         neethi_policy = NULL;
     }
     return;
@@ -130,7 +131,8 @@
     {
         void *value = NULL;
         value = axutil_array_list_get(arraylist ,env ,i);
-        axutil_array_list_add(neethi_policy->policy_components,env,value);
+        neethi_operator_increment_ref((neethi_operator_t *)value, env);
+        axutil_array_list_add(neethi_policy->policy_components, env, value);
     }
     return AXIS2_SUCCESS;
 }
@@ -144,7 +146,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
-    axutil_array_list_add(neethi_policy->policy_components,env,operator);
+    neethi_operator_increment_ref(operator, env);
+    axutil_array_list_add(neethi_policy->policy_components, env, operator);
     return AXIS2_SUCCESS;
 }
 
@@ -182,6 +185,9 @@
                 return NULL;
             }               
             exactlyone = (neethi_exactlyone_t *)neethi_operator_get_value(op,env);
+            /*neethi_operator_set_value_null(op, env);
+            neethi_operator_free(op, env);
+            op = NULL;*/
             return exactlyone;
         }            
         else
@@ -312,4 +318,7 @@
     policy->policy_components = NULL;
     return AXIS2_SUCCESS;
 }
+
+
+
 

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/asymmetric_binding_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/asymmetric_binding_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/asymmetric_binding_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/asymmetric_binding_builder.c Mon Jun 11 02:42:41 2007
@@ -65,23 +65,17 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy);
-            neethi_policy_set_components_null(policy, env);
+            alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
-            alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0);            
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             asymmetric_binding_process_alternatives(env, all, asymmetric_binding);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, asymmetric_binding, ASSERTION_TYPE_ASSYMMETRIC_BINDING);*/
-            neethi_policy_set_components_null(normalized_policy, env);
-            neethi_policy_free(normalized_policy, env);
-            normalized_policy = NULL;
 
             assertion = neethi_assertion_create_with_args(env, (void *)rp_asymmetric_binding_free, asymmetric_binding, ASSERTION_TYPE_ASSYMMETRIC_BINDING);
-            /*neethi_policy_free(policy, env);
-            policy = NULL;*/
+            neethi_policy_free(normalized_policy, env);
+            normalized_policy = NULL;
 
             return assertion;
         }

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/initiator_token_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/initiator_token_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/initiator_token_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/initiator_token_builder.c Mon Jun 11 02:42:41 2007
@@ -50,7 +50,6 @@
     neethi_all_t *all = NULL;
     neethi_assertion_t *assertion = NULL;
     neethi_policy_t *normalized_policy = NULL;
-    axutil_array_list_t *temp = NULL;
 
     initiator_token = rp_property_create(env);
     
@@ -67,24 +66,18 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy);
-            neethi_policy_set_components_null(policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
-            alternatives =neethi_policy_get_alternatives(normalized_policy, env);
+            alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0);            
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             initiator_token_process_alternatives(env, all, initiator_token);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, initiator_token, ASSERTION_TYPE_INITIATOR_TOKEN);*/
-            temp = neethi_policy_get_policy_components(normalized_policy, env);
-            axutil_array_list_free(temp, env);
-            temp = NULL;
-            neethi_policy_set_components_null(normalized_policy, env);
+            assertion = neethi_assertion_create_with_args(env, (void *)rp_property_free, initiator_token, ASSERTION_TYPE_INITIATOR_TOKEN);
+
             neethi_policy_free(normalized_policy, env);
             normalized_policy = NULL;
 
-            assertion = neethi_assertion_create_with_args(env, (void *)rp_property_free, initiator_token, ASSERTION_TYPE_INITIATOR_TOKEN);
             return assertion;
         }
         else return NULL;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/layout_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/layout_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/layout_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/layout_builder.c Mon Jun 11 02:42:41 2007
@@ -57,8 +57,6 @@
             if(!local_name)
                 return NULL;
             rp_layout_set_value(layout, env, local_name);
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, layout, ASSERTION_TYPE_LAYOUT);*/
             assertion = neethi_assertion_create_with_args(env, (void *)rp_layout_free, layout, ASSERTION_TYPE_LAYOUT);
             return assertion;
         }

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/recipient_token_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/recipient_token_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/recipient_token_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/recipient_token_builder.c Mon Jun 11 02:42:41 2007
@@ -66,7 +66,6 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy);
-            neethi_policy_set_components_null(policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
             alternatives =neethi_policy_get_alternatives(normalized_policy, env);
@@ -74,13 +73,11 @@
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             recipient_token_process_alternatives(env, all, recipient_token);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, recipient_token, ASSERTION_TYPE_RECIPIENT_TOKEN);*/
-            neethi_policy_set_components_null(normalized_policy, env);
+            assertion = neethi_assertion_create_with_args(env, (void *)rp_property_free, recipient_token, ASSERTION_TYPE_RECIPIENT_TOKEN);
+
             neethi_policy_free(normalized_policy, env);
             normalized_policy = NULL;
 
-            assertion = neethi_assertion_create_with_args(env, (void *)rp_property_free, recipient_token, ASSERTION_TYPE_RECIPIENT_TOKEN);
             return assertion;
         }
         else return NULL;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/supporting_tokens_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/supporting_tokens_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/supporting_tokens_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/supporting_tokens_builder.c Mon Jun 11 02:42:41 2007
@@ -87,17 +87,18 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE,policy);
-            neethi_policy_set_components_null(policy, env);
+            alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
-            alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0);            
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             supporting_tokens_process_alternatives(env, all, supporting_tokens);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, supporting_tokens, ASSERTION_TYPE_SUPPORTING_TOKENS);*/
             assertion = neethi_assertion_create_with_args(env, (void *)rp_supporting_tokens_free, supporting_tokens, ASSERTION_TYPE_SUPPORTING_TOKENS);
+            
+            neethi_policy_free(normalized_policy, env);
+            normalized_policy = NULL;
+                        
             return assertion;
         }
         else return NULL;
@@ -136,7 +137,7 @@
                 algorithmsuite = (rp_algorithmsuite_t *)neethi_assertion_get_value(assertion, env);
                 if(algorithmsuite)
                 {
-                    rp_supporting_tokens_set_algorithmsuite(supporting_tokens,env,algorithmsuite);
+                    rp_supporting_tokens_set_algorithmsuite(supporting_tokens, env, algorithmsuite);
                 }
                 else return AXIS2_FAILURE;
             }

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_binding_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_binding_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_binding_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_binding_builder.c Mon Jun 11 02:42:41 2007
@@ -48,6 +48,7 @@
     neethi_operator_t *component = NULL;
     neethi_all_t *all = NULL;
     neethi_assertion_t *assertion = NULL;
+    neethi_policy_t *normalized_policy = NULL;
 
     transport_binding = rp_transport_binding_create(env);
     
@@ -63,15 +64,19 @@
             {
                 return NULL;
             }
-            policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); 
-            alternatives = neethi_policy_get_alternatives(policy, env);
+            normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); 
+            neethi_policy_free(policy, env);
+            policy = NULL;
+            alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0);            
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             transport_binding_process_alternatives(env, all, transport_binding);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, transport_binding, ASSERTION_TYPE_TRANSPORT_BINDING);*/
             assertion = neethi_assertion_create_with_args(env, (void *)rp_transport_binding_free, transport_binding, ASSERTION_TYPE_TRANSPORT_BINDING);
+            
+            neethi_policy_free(normalized_policy, env);
+            normalized_policy = NULL;
+
             return assertion;
         }
         else return NULL;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_token_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_token_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_token_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/transport_token_builder.c Mon Jun 11 02:42:41 2007
@@ -49,6 +49,7 @@
     neethi_operator_t *component = NULL;
     neethi_all_t *all = NULL;
     neethi_assertion_t *assertion = NULL;
+    neethi_policy_t *normalized_policy = NULL;
 
     transport_token = rp_property_create(env);
     
@@ -64,15 +65,18 @@
             {
                 return NULL;
             }
-            policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); 
-            alternatives =neethi_policy_get_alternatives(policy, env);
+            normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy); 
+            policy = NULL;
+            alternatives =neethi_policy_get_alternatives(normalized_policy, env);
             component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0);            
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             transport_token_process_alternatives(env, all, transport_token);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, transport_token, ASSERTION_TYPE_TRANSPORT_TOKEN);*/
             assertion = neethi_assertion_create_with_args(env, (void *)rp_property_free, transport_token, ASSERTION_TYPE_TRANSPORT_TOKEN);
+
+            neethi_policy_free(normalized_policy, env);
+            normalized_policy = NULL;
+
             return assertion;
         }
         else return NULL;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/username_token_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/username_token_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/username_token_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/username_token_builder.c Mon Jun 11 02:42:41 2007
@@ -81,7 +81,6 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy);
-            neethi_policy_set_components_null(policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
             alternatives = neethi_policy_get_alternatives(normalized_policy, env);
@@ -89,9 +88,11 @@
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             username_token_process_alternatives(env, all, username_token);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, username_token, ASSERTION_TYPE_USERNAME_TOKEN);*/
             assertion = neethi_assertion_create_with_args(env, (void *)rp_username_token_free, username_token, ASSERTION_TYPE_USERNAME_TOKEN);
+            
+            neethi_policy_free(normalized_policy, env);
+            normalized_policy = NULL;
+
             return assertion;
         }
         else return NULL;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/wss10_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/wss10_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/wss10_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/wss10_builder.c Mon Jun 11 02:42:41 2007
@@ -65,7 +65,6 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy);
-            neethi_policy_set_components_null(policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
             alternatives = neethi_policy_get_alternatives(normalized_policy, env);
@@ -73,9 +72,11 @@
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             wss10_process_alternatives(env, all, wss10);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, wss10, ASSERTION_TYPE_WSS10);*/
             assertion = neethi_assertion_create_with_args(env, (void *)rp_wss10_free, wss10, ASSERTION_TYPE_WSS10);
+
+            neethi_policy_free(normalized_policy, env);
+            normalized_policy = NULL;
+
             return assertion;
         }
         else return NULL;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/builder/x509_token_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/builder/x509_token_builder.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/builder/x509_token_builder.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/builder/x509_token_builder.c Mon Jun 11 02:42:41 2007
@@ -51,6 +51,7 @@
     axutil_qname_t *qname = NULL;
     neethi_assertion_t *assertion = NULL;
     neethi_policy_t *normalized_policy = NULL;
+    /*axutil_array_list_t *temp = NULL;*/
 
     x509_token = rp_x509_token_create(env);
     qname = axutil_qname_create(env,RP_INCLUDE_TOKEN,RP_SP_NS,RP_SP_PREFIX);
@@ -75,20 +76,18 @@
                 return NULL;
             }
             normalized_policy = neethi_engine_get_normalize(env, AXIS2_FALSE, policy);
-            neethi_policy_set_components_null(policy, env);
             neethi_policy_free(policy, env);
             policy = NULL;
             alternatives = neethi_policy_get_alternatives(normalized_policy, env);
             component = (neethi_operator_t *)axutil_array_list_get(alternatives, env, 0);            
             all = (neethi_all_t *)neethi_operator_get_value(component ,env);
             x509_token_process_alternatives(env, all, x509_token);
+            
+            assertion = neethi_assertion_create_with_args(env, (void *)rp_x509_token_free, x509_token, ASSERTION_TYPE_X509_TOKEN);
 
-            /*assertion = neethi_assertion_create(env);
-            neethi_assertion_set_value(assertion, env, x509_token, ASSERTION_TYPE_X509_TOKEN);*/
             neethi_policy_free(normalized_policy, env);
             normalized_policy = NULL;
 
-            assertion = neethi_assertion_create_with_args(env, (void *)rp_x509_token_free, x509_token, ASSERTION_TYPE_X509_TOKEN);
             return assertion;
         }
         else return NULL;
@@ -139,6 +138,10 @@
         }
         else if(type == ASSERTION_TYPE_WSS_X509_V3_TOKEN_10)
         {
+            /*neethi_assertion_free(assertion, env);
+            assertion = NULL;*/
+            /*neethi_operator_free(operator, env);
+            operator = NULL;*/
             rp_x509_token_set_token_version_and_type(x509_token, env, RP_WSS_X509_V3_TOKEN_10);
         }
         else return AXIS2_FAILURE;

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/algorithmsuite.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/algorithmsuite.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/algorithmsuite.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/algorithmsuite.c Mon Jun 11 02:42:41 2007
@@ -38,6 +38,7 @@
     axis2_char_t *soap_normalization;
     axis2_char_t *str_transformation;
     axis2_char_t *xpath;
+    int ref;
 
 };
 
@@ -74,7 +75,7 @@
     algorithmsuite->soap_normalization = NULL;
     algorithmsuite->str_transformation = NULL;
     algorithmsuite->xpath = NULL;
-
+    algorithmsuite->ref = 0;
     return algorithmsuite;
 }
 
@@ -86,6 +87,11 @@
         
     if(algorithmsuite)
     {
+        if (--(algorithmsuite->ref) > 0)
+        {
+            return;
+        }
+        
         AXIS2_FREE(env->allocator, algorithmsuite);
         algorithmsuite = NULL;
     }
@@ -592,3 +598,13 @@
     algorithmsuite->xpath = xpath;
     return AXIS2_SUCCESS;
 }
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_algorithmsuite_increment_ref(rp_algorithmsuite_t *algorithmsuite,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    algorithmsuite->ref++;
+    return AXIS2_SUCCESS;
+}
+

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/asymmetric_binding.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/asymmetric_binding.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/asymmetric_binding.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/asymmetric_binding.c Mon Jun 11 02:42:41 2007
@@ -125,8 +125,10 @@
     rp_property_t *initiator_token)
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK(env->error,initiator_token,AXIS2_FAILURE);
-    asymmetric_binding->initiator_token =initiator_token; 
+    AXIS2_PARAM_CHECK(env->error, initiator_token, AXIS2_FAILURE);
+
+    rp_property_increment_ref(initiator_token, env);
+    asymmetric_binding->initiator_token = initiator_token; 
     return AXIS2_SUCCESS;
 
 }
@@ -139,7 +141,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error,recipient_token,AXIS2_FAILURE);
-    
+   
+    rp_property_increment_ref(recipient_token, env);
     asymmetric_binding->recipient_token = recipient_token; 
     return AXIS2_SUCCESS;
     

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/binding_commons.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/binding_commons.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/binding_commons.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/binding_commons.c Mon Jun 11 02:42:41 2007
@@ -145,7 +145,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error,algorithmsuite,AXIS2_FAILURE);
-    
+
+    rp_algorithmsuite_increment_ref(algorithmsuite, env);
     binding_commons->algorithmsuite = algorithmsuite;    
     return AXIS2_SUCCESS;
 }
@@ -168,7 +169,8 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error,layout,AXIS2_FAILURE);
-    
+
+    rp_layout_increment_ref(layout, env);
     binding_commons->layout = layout;    
     return AXIS2_SUCCESS;
 }

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/layout.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/layout.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/layout.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/layout.c Mon Jun 11 02:42:41 2007
@@ -20,6 +20,7 @@
 struct rp_layout_t
 {
     axis2_char_t *value;
+    int ref;
 };
 
 AXIS2_EXTERN rp_layout_t *AXIS2_CALL 
@@ -38,6 +39,7 @@
         return NULL;
     }
     layout->value = RP_LAYOUT_STRICT;
+    layout->ref = 0;
     return layout;
 
 }
@@ -50,6 +52,10 @@
     
     if(layout)
     {
+        if (--(layout->ref) > 0)
+        {
+            return;
+        }
         AXIS2_FREE(env->allocator, layout);
         layout = NULL;
     }
@@ -79,4 +85,14 @@
     layout->value = value;
     return AXIS2_SUCCESS;
 }
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_layout_increment_ref(rp_layout_t *layout,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    layout->ref++;
+    return AXIS2_SUCCESS;
+}
+
 

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/property.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/property.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/property.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/property.c Mon Jun 11 02:42:41 2007
@@ -28,6 +28,7 @@
 {
     int type;
     void *value;
+    int ref;
 };
 
 
@@ -48,6 +49,7 @@
     }
     property->type = 0;
     property->value = NULL;
+    property->ref = 0;
 
     return property;
 }
@@ -61,6 +63,11 @@
     
     if(property)
     {
+        if (--(property->ref) > 0)
+        {
+            return;
+        }
+
         if(property->value)
         {
             switch(property->type)
@@ -149,6 +156,24 @@
     AXIS2_PARAM_CHECK(env->error,value,AXIS2_FAILURE);
 
     property->type = type;
+
+    if(type == RP_TOKEN_X509)
+    {
+        rp_x509_token_increment_ref((rp_x509_token_t *)value, env);    
+    }        
+    if(type == RP_WSS_WSS10)
+    {
+        rp_wss10_increment_ref((rp_wss10_t *)value, env);
+    }
+    if(type == RP_TOKEN_USERNAME)
+    {
+        rp_username_token_increment_ref((rp_username_token_t *)value, env);
+    }    
+    if(type == RP_SUPPORTING_SIGNED_SUPPORTING)
+    {
+        rp_supporting_tokens_increment_ref((rp_supporting_tokens_t *)value, env);
+    }    
+
     property->value =(void *)value; 
 
     return AXIS2_SUCCESS;
@@ -164,3 +189,13 @@
         
     return property->type;
 }
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_property_increment_ref(rp_property_t *property,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    property->ref++;
+    return AXIS2_SUCCESS;
+}
+

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/supporting_tokens.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/supporting_tokens.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/supporting_tokens.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/supporting_tokens.c Mon Jun 11 02:42:41 2007
@@ -28,6 +28,7 @@
     rp_signed_encrypted_elements_t *encrypted_elements;
     rp_signed_encrypted_parts_t *encrypted_parts;
     int type;
+    int ref;
 };
 
 AXIS2_EXTERN rp_supporting_tokens_t *AXIS2_CALL 
@@ -60,6 +61,7 @@
     supporting_tokens->encrypted_parts = NULL;
     supporting_tokens->encrypted_elements = NULL;
     supporting_tokens->type = 0;
+    supporting_tokens->ref = 0;
     return supporting_tokens;
 }
 
@@ -72,6 +74,11 @@
     if(supporting_tokens)
     {
 
+        if (--(supporting_tokens->ref) > 0)
+        {
+            return;
+        }
+        
         if(supporting_tokens->tokens)
         {
             int i = 0;
@@ -140,9 +147,10 @@
             rp_property_t *token)
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK(env->error,token,AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, token, AXIS2_FAILURE);
     
-    axutil_array_list_add(supporting_tokens->tokens,env,token);
+    rp_property_increment_ref(token, env);
+    axutil_array_list_add(supporting_tokens->tokens, env, token);
     return AXIS2_SUCCESS;
 }
 
@@ -166,6 +174,7 @@
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error,algorithmsuite,AXIS2_FAILURE);
 
+    rp_algorithmsuite_increment_ref(algorithmsuite, env);
     supporting_tokens->algorithmsuite = algorithmsuite;
     return AXIS2_SUCCESS;
 }
@@ -278,3 +287,13 @@
     supporting_tokens->type = type;
     return AXIS2_SUCCESS;
 }
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_supporting_tokens_increment_ref(rp_supporting_tokens_t *supporting_tokens,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    supporting_tokens->ref++;
+    return AXIS2_SUCCESS;
+}
+

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/ut.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/ut.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/ut.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/ut.c Mon Jun 11 02:42:41 2007
@@ -25,6 +25,7 @@
     axis2_bool_t derivedkeys;
     axis2_bool_t useUTprofile10;
     axis2_bool_t useUTprofile11;
+    int ref;
 };
 
 AXIS2_EXTERN rp_username_token_t *AXIS2_CALL 
@@ -46,7 +47,8 @@
     username_token->derivedkeys = AXIS2_FALSE;
     username_token->useUTprofile10 = AXIS2_TRUE;
     username_token->useUTprofile11 = AXIS2_FALSE;
-    
+    username_token->ref = 0;
+
     return username_token;
 
 }
@@ -58,6 +60,11 @@
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     
+    if (--(username_token->ref) > 0)
+    {
+        return;
+    }
+    
     if(username_token)
     {
         AXIS2_FREE(env->allocator, username_token);
@@ -162,5 +169,14 @@
     AXIS2_PARAM_CHECK(env->error,useUTprofile11,AXIS2_FAILURE);    
     username_token->useUTprofile11 = useUTprofile11;
 
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_username_token_increment_ref(rp_username_token_t *username_token,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    username_token->ref++;
     return AXIS2_SUCCESS;
 }

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/wss10.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/wss10.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/wss10.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/wss10.c Mon Jun 11 02:42:41 2007
@@ -26,6 +26,7 @@
     axis2_bool_t must_support_ref_external_uri;
     axis2_bool_t must_support_ref_embedded_token;
     axis2_bool_t must_support_direct_reference;
+    int ref;
 };
 
 AXIS2_EXTERN rp_wss10_t *AXIS2_CALL
@@ -48,6 +49,7 @@
     wss10->must_support_ref_external_uri = AXIS2_FALSE;
     wss10->must_support_ref_embedded_token = AXIS2_FALSE;
     wss10->must_support_direct_reference = AXIS2_TRUE;
+    wss10->ref = 0;
 
     return wss10;
 
@@ -61,6 +63,11 @@
     
     if(wss10)
     {
+        if (--(wss10->ref) > 0)
+        {
+            return;
+        }
+            
         AXIS2_FREE(env->allocator, wss10);
         wss10 = NULL;
     }
@@ -151,6 +158,16 @@
     AXIS2_PARAM_CHECK(env->error,must_support_ref_embedded_token,AXIS2_FAILURE);    
     wss10->must_support_ref_embedded_token = must_support_ref_embedded_token;
 
+    return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_wss10_increment_ref(rp_wss10_t *wss10,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    wss10->ref++;
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/axis2/trunk/c/neethi/src/secpolicy/model/x509_token.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/neethi/src/secpolicy/model/x509_token.c?view=diff&rev=546062&r1=546061&r2=546062
==============================================================================
--- webservices/axis2/trunk/c/neethi/src/secpolicy/model/x509_token.c (original)
+++ webservices/axis2/trunk/c/neethi/src/secpolicy/model/x509_token.c Mon Jun 11 02:42:41 2007
@@ -28,6 +28,7 @@
     axis2_bool_t require_embedded_token_reference;
     axis2_bool_t require_thumb_print_reference;
     axis2_char_t *token_version_and_type;
+    int ref;
 
 };
 
@@ -41,6 +42,7 @@
     x509_token =  (rp_x509_token_t *) AXIS2_MALLOC (env->allocator,
     sizeof (rp_x509_token_t));
 
+
     if(x509_token == NULL)
     {
         AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
@@ -52,7 +54,8 @@
     x509_token->require_issuer_serial_reference  = AXIS2_FALSE;
     x509_token->require_embedded_token_reference = AXIS2_FALSE;
     x509_token->require_thumb_print_reference = AXIS2_FALSE;
-    x509_token->token_version_and_type = RP_WSS_X509_V3_TOKEN_10;    
+    x509_token->token_version_and_type = RP_WSS_X509_V3_TOKEN_10;   
+    x509_token->ref = 0;
     return x509_token;
 }
 
@@ -64,6 +67,10 @@
     
     if(x509_token)
     {
+        if (--(x509_token->ref) > 0)
+        {
+            return;
+        }
         AXIS2_FREE(env->allocator, x509_token);
         x509_token = NULL;
     }
@@ -223,3 +230,14 @@
     x509_token->token_version_and_type = token_version_and_type;
     return AXIS2_SUCCESS;
 }
+
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rp_x509_token_increment_ref(rp_x509_token_t *x509_token,
+    const axutil_env_t *env)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    x509_token->ref++;
+    return AXIS2_SUCCESS;
+}
+



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org