axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lefrancois, Carl" <Carl.Lefranc...@axa-canada.com>
Subject RE : RE : early env cleanup in asynchronous mode
Date Mon, 27 Oct 2008 20:59:36 GMT
I am (now) using the latest SVN version of Axis2/C.   Unfortunately my workstation is not equipped
with a profiling tool.  Maybe I can try a trial version of BoundsChecker or some similar windows
tool.  

Does anyone have an idea how I can delay the unloading of my DLL until my code finishes executing
while using Axis2/C in non-blocking mode?

Carl

-----Message d'origine-----
De : Manjula Peiris [mailto:manjula@wso2.com] 
Envoyé : lundi, octobre 27, 2008 11:05
À : Apache AXIS C User List
Objet : Re: RE : early env cleanup in asynchronous mode


What is the Axis2/C version you are using ? Can you ran the client through a memory profiling
tool like valgrind and sent us the traces?  


On Mon, 2008-10-27 at 10:14 -0400, Lefrancois, Carl wrote:
> Thanks for your reply, Supun
> 
> I am hesitant to raise a Jira right away for two reasons: my version 
> of Axis2/C is a few months old and I believe this behaviour may be 
> right, and it is me who is calling the wrong function.  Are we sure 
> there is a bug here?
> 
> Has anyone on the list made a client which uses the same env for many 
> web service calls in asynchronous mode?  Maybe in this mode we need to 
> create a new env for each call?
> 
> If I cannot find a better function and no one replies saying this 
> should work, then a Jira could be a good idea.  I think this 
> functionality is something Axis2/C should support.
> 
> 
> -Carl
> 
> 
> -----Message d'origine-----
> De : Supun Kamburugamuva [mailto:supun06@gmail.com]
> Envoyé : samedi, octobre 25, 2008 00:37
> À : Apache AXIS C User List
> Objet : Re: early env cleanup in asynchronous mode
> 
> 
> Recently I got this error. But not sure what is happening exactly. 
> Need to have a thorough look. Please create a Jira.
> 
> Supun.
> 
> 
> On Sat, Oct 25, 2008 at 12:27 AM, Lefrancois, Carl 
> <Carl.Lefrancois@axa-canada.com> wrote:
> 
> Hello all,
> 
> No doubt my problem is due to user error, but I'm not sure what to try 
> next to fix this problem.
> 
> I am working to implement asynchronous mode client calls in a project 
> which is already fairly mature and works well in blocking mode.  When 
> my DLL is loaded, I initialise the Axis2/C environment, and I free the 
> environment on unload of the DLL.  In between I can make many web 
> service calls in blocking mode.
> 
> What is happening now is that I used code from the echo_non_blocking.c 
> sample to implement asynchronous mode but I get an access violation 
> because the env is freed inside the function which calls my 
> on_complete callback.  After this function is completed my application 
> still tries to use the same env.
> 
> Can someone point out which function to call so I can make use of the 
> asynchronous callbacks and still keep the same environment between 
> calls?
> 
> 
> 
> 
> here is the code I am using: 
> ======================================================================
> ==
> =============================
>      /* Send request */
>      svc_client = axis2_stub_get_svc_client (stub, axis2_env );
>      AXIS2_LOG_INFO(axis2_env->log, "\n---appel d'axis2 send receive
> INITIÉ---\n");  ******* I see this in the log
>      axis2_svc_client_send_receive_non_blocking(svc_client, axis2_env,
> payload, callback);
>      AXIS2_LOG_INFO(axis2_env->log, "\n---appel d'axis2 send receive
> RETOURNÉ---\n");******* I see this in the log
> 
>      /** Wait till callback is complete. Simply keep the parent thread 
> running
>         until our on_complete or on_error is invoked */
>      while (count < 15)
>      {
>          if (isComplete)
>          {
>              /* We are done with the callback */
>              break;
>          }
>          AXIS2_LOG_INFO(axis2_env->log, "\n---AXIS DORT---\n");
> ******* I see this in the log
>          AXIS2_SLEEP(1);
>          AXIS2_LOG_INFO(axis2_env->log, "\n---AXIS SE RÉVEILLE---\n");
> ******* crash happens here after on_complete.. Axis2_env is freed!
>          count++;
>      }
> 
>      if (!(count < 15))
>      {
>        AXIS2_LOG_INFO(axis2_env->log, "\n---appel d'axis2 send receive
> COMPLÉTÉ TIMEOUT---\n");   **** never see this in log
>        *lpiEtatTraitement = ETAT_TRAITEMENT_TIMEOUT;
>      }
>      else
>      {
>        AXIS2_LOG_INFO(axis2_env->log, "\n---appel d'axis2 send receive
> COMPLÉTÉ OK---\n");        **** never see this in log
>      } 
> ======================================================================
> ==
> =============================
> 
> 
> axis2_status_t AXIS2_CALL OnRatingStubOpComplete(     struct
> axis2_callback * callback,     const axutil_env_t * env)
> {
>    AXIS2_LOG_INFO(axis2_env->log,
> "\n---OnRatingStubOpComplete()---\n");            ******* I see this in
> the log
>    isComplete = 1;
>    return AXIS2_SUCCESS;
> }
> 
> ======================================================================
> ==
> =============================
> 
> ... In the trace execution goes into op_client.c here:
> 
>    if (args_list->callback)
>    {
>        axis2_callback_invoke_on_complete(args_list->callback, th_env,
> args_list->op_client->async_result);    **** calls my on_complete
> function above
>        axis2_callback_set_complete(args_list->callback, th_env, 
> AXIS2_TRUE);
>    }
> 
>    /* clean up memory */
>    axis2_async_result_free(args_list->op_client->async_result, 
> th_env);
> 
>    axis2_op_ctx_free(op_ctx, th_env);
> 
>    th_pool = th_env->thread_pool;
> 
>    AXIS2_FREE(th_env->allocator, args_list);
> 
>    if (th_env)
>    {
>        axutil_free_thread_env(th_env);
>        th_env = NULL;
>    }
>    axutil_thread_pool_exit_thread(th_pool, thd);
> ***** this frees my env! as shown in my log
>    return NULL;
> }
> 
> ======================================================================
> ==
> =============================
> 
> 
> 
> 
> So can someone tell me, is axis2_svc_client_send_receive_non_blocking
> the wrong function to use if I want to make many service calls with 
> one environment?
> 
> 
> Carl Lefrançois
> Analyste / Programmeur
> Larochelle Groupe Conseil
> 
> Tél. :      514-282-6817, poste 4548
> Couriel : carl.lefrancois@axa-canada.com
>  _____
> 
> "Ce message est confidentiel, à l'usage exclusif du destinataire 
> ci-dessus et son contenu ne représente en aucun cas un engagement de 
> la part de AXA, sauf en cas de stipulation expresse et par écrit de la 
> part de AXA. Toute publication, utilisation ou diffusion, même 
> partielle, doit être autorisée préalablement. Si vous n'êtes pas 
> destinataire de ce message, merci d'en avertir immédiatement 
> l'expéditeur."
> 
> "This e-mail message is confidential, for the exclusive use of the 
> addressee and its contents shall not constitute a commitment by AXA, 
> except as otherwise specifically provided in writing by AXA. Any 
> unauthorized disclosure, use or dissemination, either whole or 
> partial, is prohibited. If you are not the intended recipient of the 
> message, please notify the sender immediately."
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-c-user-help@ws.apache.org
> 
> 
> 
> 
> 


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


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


Mime
View raw message