You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by da...@apache.org on 2006/10/24 13:09:33 UTC
svn commit: r467307 - in /webservices/axis2/trunk/c: include/axis2_msg_ctx.h
modules/core/context/msg_ctx.c modules/core/receivers/msg_recv.c
modules/core/transport/http/http_worker.c
Author: damitha
Date: Tue Oct 24 04:09:32 2006
New Revision: 467307
URL: http://svn.apache.org/viewvc?view=rev&rev=467307
Log:
Fix AXIS2C-307
Modified:
webservices/axis2/trunk/c/include/axis2_msg_ctx.h
webservices/axis2/trunk/c/modules/core/context/msg_ctx.c
webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c
webservices/axis2/trunk/c/modules/core/transport/http/http_worker.c
Modified: webservices/axis2/trunk/c/include/axis2_msg_ctx.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/include/axis2_msg_ctx.h?view=diff&rev=467307&r1=467306&r2=467307
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_msg_ctx.h (original)
+++ webservices/axis2/trunk/c/include/axis2_msg_ctx.h Tue Oct 24 04:09:32 2006
@@ -613,6 +613,35 @@
const axis2_bool_t paused);
/**
+ * Gets the bool value indicating the keep value status. It is possible
+ * to keep alive the message context by any handler. By calling this method
+ * one can see whether it is possible to clean the message context.
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @return AXIS2_TRUE if message context is keep alive, else AXIS2_FALSE
+ */
+ axis2_bool_t (AXIS2_CALL *
+ is_keep_alive)(
+ const axis2_msg_ctx_t *msg_ctx,
+ const axis2_env_t *env);
+
+ /**
+ * Sets the bool value indicating the keep alive status of invocation.
+ * By setting this one can indicate the engine not to clean the message
+ * context.
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @param keep_alive keep alive
+ * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+ */
+ axis2_status_t (AXIS2_CALL *
+ set_keep_alive)(
+ axis2_msg_ctx_t *msg_ctx,
+ const axis2_env_t *env,
+ const axis2_bool_t keep_alive);
+
+
+ /**
* Gets transport in description.
* @param msg_ctx message context
* @param env pointer to environment struct
@@ -1586,6 +1615,17 @@
@sa axis2_msg_ctx_ops#set_paused */
#define AXIS2_MSG_CTX_SET_PAUSED(msg_ctx, env, paused) \
((msg_ctx)->ops->set_paused(msg_ctx, env, paused))
+
+/** Gets bool value indicating the keep alive status of invocation.
+ @sa axis2_msg_ctx_ops#is_keep_alive */
+#define AXIS2_MSG_CTX_IS_KEEP_ALIVE(msg_ctx, env) \
+ ((msg_ctx)->ops->is_keep_alive(msg_ctx, env))
+
+/** Sets bool value indicating the keep alive status of invocation.
+ @sa axis2_msg_ctx_ops#set_keep_alive */
+#define AXIS2_MSG_CTX_SET_KEEP_ALIVE(msg_ctx, env, keep_alive) \
+ ((msg_ctx)->ops->set_keep_alive(msg_ctx, env, keep_alive))
+
/** Gets transport in description.
@sa axis2_msg_ctx_ops#get_transport_in_desc */
Modified: webservices/axis2/trunk/c/modules/core/context/msg_ctx.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/context/msg_ctx.c?view=diff&rev=467307&r1=467306&r2=467307
==============================================================================
--- webservices/axis2/trunk/c/modules/core/context/msg_ctx.c (original)
+++ webservices/axis2/trunk/c/modules/core/context/msg_ctx.c Tue Oct 24 04:09:32 2006
@@ -81,6 +81,7 @@
axis2_bool_t new_thread_required;
/** paused */
axis2_bool_t paused;
+ axis2_bool_t keep_alive;
/** output written? */
axis2_bool_t output_written;
/** service context ID */
@@ -335,6 +336,17 @@
const axis2_env_t *env,
axis2_bool_t paused);
+axis2_bool_t AXIS2_CALL
+axis2_msg_ctx_is_keep_alive(
+ const axis2_msg_ctx_t *msg_ctx,
+ const axis2_env_t *env);
+
+axis2_status_t AXIS2_CALL
+axis2_msg_ctx_set_keep_alive(
+ struct axis2_msg_ctx *msg_ctx,
+ const axis2_env_t *env,
+ axis2_bool_t keep_alive);
+
struct axis2_transport_in_desc *AXIS2_CALL
axis2_msg_ctx_get_transport_in_desc(
const axis2_msg_ctx_t *msg_ctx,
@@ -688,6 +700,7 @@
msg_ctx_impl->message_id = NULL;
msg_ctx_impl->new_thread_required = AXIS2_FALSE;
msg_ctx_impl->paused = AXIS2_FALSE;
+ msg_ctx_impl->keep_alive = AXIS2_FALSE;
msg_ctx_impl->output_written = AXIS2_FALSE;
msg_ctx_impl->svc_ctx_id = NULL;
msg_ctx_impl->paused_phase_name = NULL;
@@ -785,6 +798,8 @@
msg_ctx_impl->msg_ctx.ops->get_msg_info_headers = axis2_msg_ctx_get_msg_info_headers;
msg_ctx_impl->msg_ctx.ops->get_paused = axis2_msg_ctx_get_paused;
msg_ctx_impl->msg_ctx.ops->set_paused = axis2_msg_ctx_set_paused;
+ msg_ctx_impl->msg_ctx.ops->set_keep_alive = axis2_msg_ctx_set_keep_alive;
+ msg_ctx_impl->msg_ctx.ops->is_keep_alive = axis2_msg_ctx_is_keep_alive;
msg_ctx_impl->msg_ctx.ops->get_transport_in_desc = axis2_msg_ctx_get_transport_in_desc;
msg_ctx_impl->msg_ctx.ops->get_transport_out_desc = axis2_msg_ctx_get_transport_out_desc;
msg_ctx_impl->msg_ctx.ops->set_transport_in_desc = axis2_msg_ctx_set_transport_in_desc;
@@ -1559,6 +1574,29 @@
msg_ctx_impl->paused = paused;
msg_ctx_impl->paused_phase_index = msg_ctx_impl->current_phase_index;
return AXIS2_SUCCESS;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_msg_ctx_set_keep_alive(
+ struct axis2_msg_ctx *msg_ctx,
+ const axis2_env_t *env,
+ axis2_bool_t keep_alive)
+{
+ axis2_msg_ctx_impl_t *msg_ctx_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ msg_ctx_impl = AXIS2_INTF_TO_IMPL(msg_ctx);
+ msg_ctx_impl->keep_alive = keep_alive;
+ return AXIS2_SUCCESS;
+}
+
+axis2_bool_t AXIS2_CALL
+axis2_msg_ctx_is_keep_alive(
+ const axis2_msg_ctx_t *msg_ctx,
+ const axis2_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ return AXIS2_INTF_TO_IMPL(msg_ctx)->keep_alive;
}
struct axis2_transport_in_desc *AXIS2_CALL
Modified: webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c?view=diff&rev=467307&r1=467306&r2=467307
==============================================================================
--- webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c (original)
+++ webservices/axis2/trunk/c/modules/core/receivers/msg_recv.c Tue Oct 24 04:09:32 2006
@@ -476,7 +476,10 @@
/* test code: uncomment this when test is over */
axis2_core_utils_reset_out_msg_ctx(env, out_msg_ctx);
if (!AXIS2_MSG_CTX_IS_PAUSED(out_msg_ctx, env))
+ {
AXIS2_MSG_CTX_FREE(out_msg_ctx, env);
+ out_msg_ctx = NULL;
+ }
/*end test code */
return status;
}
Modified: webservices/axis2/trunk/c/modules/core/transport/http/http_worker.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/http_worker.c?view=diff&rev=467307&r1=467306&r2=467307
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/http_worker.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/http_worker.c Tue Oct 24 04:09:32 2006
@@ -438,11 +438,11 @@
status = AXIS2_SIMPLE_HTTP_SVR_CONN_WRITE_RESPONSE(svr_conn, env, response);
AXIS2_FREE(env->allocator, url_external_form);
url_external_form = NULL;
- /*
- AXIS2_MSG_CTX_FREE(msg_ctx, env);
-
- msg_ctx = NULL;
- */
+ if (!AXIS2_MSG_CTX_IS_KEEP_ALIVE(msg_ctx, env))
+ {
+ AXIS2_MSG_CTX_FREE(msg_ctx, env);
+ msg_ctx = NULL;
+ }
AXIS2_URL_FREE(request_url, env);
request_url = NULL;
AXIS2_HTTP_SIMPLE_RESPONSE_FREE(response, env);
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org