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 );*/