Author: kaushalye
Date: Fri Oct 12 04:57:44 2007
New Revision: 584142

URL: http://svn.apache.org/viewvc?rev=584142&view=rev
Log:
applying patch for 
RAMPARTC-35(https://issues.apache.org/jira/secure/attachment/12367629/replay_detection_crash.patch).

Modified:
    webservices/rampart/trunk/c/src/util/rampart_replay_detector.c

Modified: webservices/rampart/trunk/c/src/util/rampart_replay_detector.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_replay_detector.c?rev=584142&r1=584141&r2=584142&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_replay_detector.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_replay_detector.c Fri Oct 12 
04:57:44 2007
@@ -260,6 +260,14 @@
     const axis2_char_t *addr_msg_id = NULL;
     int max_rcds = RAMPART_RD_DEF_MAX_RCDS;
     axis2_status_t status = AXIS2_FAILURE;
+       void* pool = NULL;
+       
+       /* since replay details have to be stored until the application 
finished, 
+        * they have to be created in golbal pool. If those are created in 
msg's pool, 
+        * then it will be deleted after the request is served. (specially when 
using 
+        * with apache, current_pool will denote the message's pool) */
+       pool = env->allocator->current_pool;
+       axutil_allocator_switch_to_global_pool(env->allocator);
 
     /* By using just Timestamps we dont need addressing. But there is a chance 
that
      * two messages might generated exactly at the same time*/
@@ -284,6 +292,7 @@
     ll = rampart_replay_detector_get_ll_db(env, msg_ctx);
     if(!ll){
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][rrd] Cannot get the 
linked-list for replay detection from msg_ctx");
+               env->allocator->current_pool = pool;
         return AXIS2_FAILURE;
     }else{
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[rampart][rrd] Number of 
records =%d", axutil_linked_list_size(ll, env));
@@ -303,6 +312,7 @@
         if(AXIS2_TRUE == rampart_replay_detector_linked_list_contains(ll, env, 
(void*)msg_id)){
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,"[rampart][rrd] For ID=%s, 
a replay detected", msg_id);
             /*printf("[rampart][rrd] For ID=%s, a replay detected", msg_id);*/
+                       env->allocator->current_pool = pool;
             return AXIS2_FAILURE;
         }
 
@@ -318,6 +328,7 @@
 
         /*Add current record*/
         status = axutil_linked_list_add(ll, env, 
(void*)axutil_strdup(env,msg_id));
+               env->allocator->current_pool = pool;
         if(AXIS2_SUCCESS == status){
             AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[rampart][rrd] Adding 
record  %s\n", msg_id );
             /*printf("[rampart][rrd] Adding record  %s\n", msg_id );*/


Reply via email to