Re: Potential name clashes when using multiple services

2009-01-13 Thread Patrick van Beem

 Looks like your two wsdls use (may be imported) same schema structure. If so
 the two adb structures, operations should be identical, so you can delete
 one set of them and use the same generated files for both services.

But if that's not the case but they are independent and just happen to have the 
same name?

 Normally in a wsdl, schema is not associated with a service. so we don't
 have a way to have service name inside adb structure.

Maybe it's a good idea to add the option to add a prefix to all files, 
functions and structs, that can be specified on the wsdl2c command line. That 
could help to prevent name clashes.

 On Wed, Jan 7, 2009 at 3:25 PM, Catalina Caloian 
 catalina.calo...@quintiq.com wrote:
 
 Hello

 Scenario:
- an application needs to use two services - let's call their
 respective wsdl files Mapping.wsdl and Geocoding.wsdl
- both services use a type called Coordinate
- upon generating C code from the wsdl files using WSDL2C, we get
 two adb_Coordinate.c and two adb_Coordinate.h files (one for each wsdl),
 with two adb_Coordinate_create(const axutil_env_t* env) functions etc.
- this leads to linkage errors

 I've tried to change CADBBeanTemplateHeader.xsl and
 CADBBeanTemplateSource.xsl so that the service name is used when creating
 the name of the structures - so adb_Coordinate_* becomes
 adb_Mapping_Coordinate_* and adb_Geocoding_Coordinate_* etc. However, it
 seems that the service name is not available in the intermediate xml file
 used for code generation - or I haven't been able to find it.

 The workaround was to manually rename everything. However, it would be nice
 if the service name would be automatically incorporated in the name of the
 generated structures and thus avoid potential name clashes between services.

 Thank you.


 Catalina-Georgiana Caloian
 Software Engineer

 Quintiq

 T +31 (0) 73 691 07 39
 F +31 (0) 73 691 07 54
 M +31 (0) 65 247 63 99
 E catalina.calo...@quintiq.com 
 I www.quintiq.com 


 Quintiq Conference Quintessence 09 Tuesday May 12th, 2009, Country Estate
 Duin  Kruidberg, near Amsterdam Schiphol, The Netherlands - for more
 information visit www.quintiq.com 

 This message contains information that may be privileged or confidential
 and is the property of Quintiq. It is only intended for the person to whom
 it is addressed. If you are not the intended recipient, you are not
 authorized to read, print, retain, copy, disseminate, distribute or use this
 message or any part thereof. If you have received this message in error,
 please notify the sender immediately and delete all copies of this message.
 Please note that e-mails are susceptible to change, therefore they are not
 binding.

 
 
-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E patrick.van.b...@quintiq.com
I www.quintiq.com


Quintiq Conference Quintessence 09 Tuesday May 12th, 2009, Country Estate 
Duin  Kruidberg, near Amsterdam Schiphol, The Netherlands - for more 
information visit www.quintiq.com

This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.


[jira] Created: (AXIS2C-1330) Prevent name clashes when using multiple services that happen to have identical named items

2009-01-13 Thread Patrick van Beem (JIRA)
Prevent name clashes when using multiple services that happen to have identical 
named items
---

 Key: AXIS2C-1330
 URL: https://issues.apache.org/jira/browse/AXIS2C-1330
 Project: Axis2-C
  Issue Type: Improvement
  Components: code generation
Affects Versions: Current (Nightly)
Reporter: Patrick van Beem
Priority: Minor


Problem:
When using multiple services in one project that happen to have identical named 
items, identical named structures and functions are generated in identical 
named files, but with specific content for the different services. This can not 
be linked.

Solution:
Add an optional command line option to the generator application that adds a 
prefix to every filename, structure, function, typedefinition, etc... of a 
specific code generation session. This allows the developer to generate unique 
c-code for each service.

Example scenario:
   - an application needs to use two services - let's call their
respective wsdl files Mapping.wsdl and Geocoding.wsdl
   - both services use a type called Coordinate, but it's not the same type
   - upon generating C code from the wsdl files using WSDL2C, we get
two adb_Coordinate.c and two adb_Coordinate.h files (one for each wsdl),
with two adb_Coordinate_create(const axutil_env_t* env) functions etc.
   - this leads to linkage errors


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Created: (AXIS2C-1325) _WIN32 should be used instead of WIN32

2009-01-07 Thread Patrick van Beem (JIRA)
_WIN32 should be used instead of WIN32
--

 Key: AXIS2C-1325
 URL: https://issues.apache.org/jira/browse/AXIS2C-1325
 Project: Axis2-C
  Issue Type: Bug
Affects Versions: 1.6.0
 Environment: WIN64
Reporter: Patrick van Beem
Priority: Minor


In several places, the WIN32 macro is used to check if we're running on Windows 
or not. This macro is defined in the make file (and usually by VS in the any 
WIN32 project too).
However, when users are using the library in a 64-bit windows environment, 
WIN32 is not defined, so the tests for the WIN32 macro in the axis include 
files in the distribution, fail (when they should not, because we are in a 
windows environment).

We should either use _WIN32 instead (which is always defined by the MS compiler 
in both 32-bit and 64-bit) or use something like:
#if defined(WIN32) || defined(WIN64)
to check for windows. I prefer _WIN32, because that's implicit defined while 
WIN32 and WIN64 must be defined explicit.

This change should be made at least in the public includes (since WIN32 is 
defined in the makefile, the change would have no effect internally).


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



Re: Multi-threading

2009-01-05 Thread Patrick van Beem
Hello,
-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E patrick.van.b...@quintiq.com
I www.quintiq.com


I was not dealing with asynchronous operation in my application, 
 so I don't know if you might need a separate thread-pool for 
 each created environment.  
 

 The current implementation of a thread pool in axis is no thread pool but a 
 collection of thread creation and deletion methods... So no...
   
 But when creating environment you can pass your own thread pool. Would 
 that not help?

No. The current implementation of axis relies on an infinite number of 
available threads. It assumes that when it requests a thread, it's getting one 
and it then starts the thread with a thread method / data. But in reality, a 
thread pool would have a finite number of (re-used) threads. In the case of 
axis, this would mean that the thread requesting the new thread would block 
until a new thread is available. This is not what you want. For axis to work 
with  a finite number of threads, the way it uses threads should change. It 
should not request a thread, but it should submit a job (probably the thread 
method and data) to the thread pool. The submitting thread can then continue an 
the thread pool can decide when the job is performed by which thread.

Regards,


Quintiq Conference Quintessence 09 Tuesday May 12th, 2009, Country Estate 
Duin  Kruidberg, near Amsterdam Schiphol, The Netherlands - for more 
information visit www.quintiq.com

This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.


[jira] Created: (AXIS2C-1320) default logger not thread-safe = axutil_env_create_with_error_log not thread-safe

2008-12-16 Thread Patrick van Beem (JIRA)
default logger not thread-safe = axutil_env_create_with_error_log not 
thread-safe
--

 Key: AXIS2C-1320
 URL: https://issues.apache.org/jira/browse/AXIS2C-1320
 Project: Axis2-C
  Issue Type: Bug
  Components: util
Affects Versions: Current (Nightly)
Reporter: Patrick van Beem
 Fix For: Current (Nightly)
 Attachments: Do_not_create_default_logger.diff

The current default logger is not thread-safe. That's no problem as long as 
it's known. One can use his own logger. However, the 
axutil_env_create_with_error_log() function internally first creates the 
default logger and then deletes it again to be replaced by the specified 
logger. Since even creating / deleting the default logger is not thread-safe, 
this leads to problems (in my case an assertion in the vs runtime dll).
When a logger is specified for axutil_env_create_with_error_log(), the default 
logger should not even be created.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (AXIS2C-1320) default logger not thread-safe = axutil_env_create_with_error_log not thread-safe

2008-12-16 Thread Patrick van Beem (JIRA)

 [ 
https://issues.apache.org/jira/browse/AXIS2C-1320?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick van Beem updated AXIS2C-1320:
-

Attachment: Do_not_create_default_logger.diff

 default logger not thread-safe = axutil_env_create_with_error_log not 
 thread-safe
 --

 Key: AXIS2C-1320
 URL: https://issues.apache.org/jira/browse/AXIS2C-1320
 Project: Axis2-C
  Issue Type: Bug
  Components: util
Affects Versions: Current (Nightly)
Reporter: Patrick van Beem
 Fix For: Current (Nightly)

 Attachments: Do_not_create_default_logger.diff

   Original Estimate: 2h
  Remaining Estimate: 2h

 The current default logger is not thread-safe. That's no problem as long as 
 it's known. One can use his own logger. However, the 
 axutil_env_create_with_error_log() function internally first creates the 
 default logger and then deletes it again to be replaced by the specified 
 logger. Since even creating / deleting the default logger is not thread-safe, 
 this leads to problems (in my case an assertion in the vs runtime dll).
 When a logger is specified for axutil_env_create_with_error_log(), the 
 default logger should not even be created.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



Re: Multi-threading

2008-12-16 Thread Patrick van Beem
Hello Supun,

 First we need to think why
 we need to execute Axis2/C clients in multiple threads instead of using
 separate clients in different threads. 

I had to read that sentence at least three times before I understood it :-)
You mail does shine some light on the subject for me. Both the overhead and 
performance are an issue for us. And since IO is involved when initializing a 
stub, performance might be more important.
We selected axis for our soap interface because of the adb code generation 
(ease of use while adding more and more soap clients). So writing a lot of code 
for the mep instead of 'just using the framework' is not really an option for 
us. I think we stay with the 'use our own thread pool and do sync calls from 
there' implementation of 'async' calls for now.

Thanks for the input.

 One advantage of using a single
 client is the overhead associated with multiple clients. A single
 axis2_svc_client requires multiple axis2 configurations and multiple
 environments. This is the only reasong comes to my mind right now for not
 using different axis2_svc_clients in different threads. If you have any
 other requirements please share with us.
 
 If performance is the concern associated with creating multiple clients,
 there is a solution to the problem. The real entity that do the most
 important work in the client side is axis2_mep_client. axis2_svc_client is a
 wrapper around the mep client for make the job easier for the client
 programmer. But axis2_svc_client is not designed for a multithreaded
 environment. The problems with axis2_svc_client running in multiple threads
 is it keep tracks of the various objects from previous invokations. This
 leads to double free this resources in multiple threading environments.
 
 But if we can use the mep client these problems won't be there. The only
 problem with mep client is it requires quite a bit of coding to make it
 work. If we can provide a simple thread safe method set for directly
 accessing the mep client it will be really useful. So devs what do you
 think?
 
 Supun..


-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E patrick.van.b...@quintiq.com
I www.quintiq.com



This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.


Re: RE : Multi-threading

2008-12-16 Thread Patrick van Beem
Hello Carl,

 What Axis does well is freeing resources (once we figure out how to set
 everything up right!) so I am a little confused as to where exactly the
 limitations are.  You say the callback system provided is not good in
 terms of freeing resources, but have you tried freeing your resources
 from another function which itself waits for the callback to occur?
 (either error callback or success callback)  I think this is the way
 Axis was designed with as implied by Dimuthu: wait in a loop in your
 main thread while the callbacks are outstanding, do no cleanup in the
 callback itself, let that thread exit completely and after it is done,
 then from your main thread detect that the callback ocurred and do the
 cleanup there.  

Correct. But I think the design is missing one thing. If I allocate the stub 
and env and then do an async call, I'm not allowed to free those two resources 
in the callback, because they're used by the axis framework. But if I signal 
the main thread from the callback, to free the resources, the callback might be 
switched out directly after this signal, and the main thread might free the 
resources before the callback ended and the axis framework used them. As you 
indicate, the only safe way is to wait until the thread is finished. But the 
axis framework does not provide an api to find out which thread is processing 
you request. And it shouldn't, because the thread mechanism is an 
implementation detail of the axis framework. Future versions might re-use the 
thread or even use no threading at all for asynchronous calls. So the only safe 
way to free resources is for the axis framework to signal the caller that the 
resources are no longer needed. A (second?) callback is the most used (elegant) 
way to do this. Right now, the framework does not provide a safe way of freeing 
resources in async calls.

 My reason for responding though is really to comment on this phrase:
 Threads are a rather expensive resource to use for just waiting on an
 IO completion.  It may be my lack of understanding, but I am pretty
 sure that -- at least in the win32 tcp/ip stack -- once your thread goes
 into asynchronous communication on a socket, you do not see it again
 until there is some result.  This means if there is a timeout your
 thread is inactive for a long time.  

Correct. So if I've got a couple of hundred outstanding calls, they all consume 
precious memory. In our case, this is a lot of memory, since we have a heavy 
server applications with a greedy memory allocation strategy per thread (for 
performance) and a rather large default stacks. Of course, both can be 
optimized for the 'just waiting on io-completion'-threads...
CPU-wise, it's no problem.

 How can one thread wait on more
 than one asychronous communication?  I admit this would be a far better
 solution, however from my understanding of winsock2 it is not possible.

With the fd_set in winsock and the select() function, you can wait at a maximum 
of 64 (current implementation) sockets at once. With I/O Completion Ports you 
can use one thread for an infinite number of ports (though a pool of threads 
might be a good idea if the number of sockets grows large). This is also used 
by the well known boost (C++) library. Mechanisms like these would be a much 
better implementation. But I think they don't fit well in the modular 
(transportation) design of axis, since they require knowledge about the lower 
level transportation on a higher level.
 
 Seen this way, one thread per socket communication is maybe expensive in
 resources, but it is the only way to ensure your main thread continues
 to operate in a timely fashion.

But prone to explode with a log of async calls. As a 'workaround' I've now my 
own static-sized thread pool that perform synchronous calls. If there are more 
async calls then threads in the pool, they're queued.

Thank you for your input.

-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E patrick.van.b...@quintiq.com
I www.quintiq.com



This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.


RE: Multi-threading

2008-12-16 Thread Patrick van Beem
Hello Bill

 Patrick, when building a multi-threaded Axis2C client I too was 
 concerned about the multiple environments.  Although your 
 statement is correct in a sense that each thread needs its own 
 environment/stub, these environments can in fact share much of 
 the underlying structures.  In practice, each thread needs its 
 own error stack, but it can certainly share the allocator and 
 logger.  And the configuration information is associated with 
 the allocator.  There is a primitive function 
 axutil_env_create_with_error_log_thread_pool() that lets you 
 share the substructures already created for the global environment 
 created once for the application.  This way the configuration 
 information is read only once.  Axutil_env_free_masked() lets 
 each thread free just its error stack upon termination, leaving 
 the allocator et.al. intact.  

Correct. I already use these. But afaik the configuration file is read when 
creating the stub. And that should be done for each thread / call. So while 
many resources can indeed be shared, the one needing the most (time-consuming) 
initialization (I think), can't. I think this would be a great improvement for 
the future.

 I was not dealing with asynchronous operation in my application, 
 so I don't know if you might need a separate thread-pool for 
 each created environment.  

The current implementation of a thread pool in axis is no thread pool but a 
collection of thread creation and deletion methods... So no...

Thank you for your input.

-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E patrick.van.b...@quintiq.com
I www.quintiq.com



This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.


Multi-threading

2008-12-11 Thread Patrick van Beem
Hello,

I'm experiencing serious limitations while using axis in a multi-threading 
environment. I know axis is not fully designed (yet?) for multi-threading, but 
I think some 'small' changes might make it more usable. One can't deny 
multi-threading. Here my 2 cents:


* Callback and resources
In a multi-threading environment, an asynchronous job is often responsible for 
freeing it's own resources (in this case, the environment, the stub and 
possible extra application dependent data). In the axis framework, this can't 
be done in the callback, since the framework will use the stub after the 
callback is finished. This makes it impossible for an application to free 
resources after a call has finished (because you never know exactly when the 
call (including the framework part of it) is finished. This makes the 
asynchronous implementation of axis useless in a job-oriented multi-threading 
environment.
Improvements might include adding an extra callback to free resources, that is 
made when axis has freed all its resources and does not need any resources the 
user might free.


* Environment vs stub
Since every thread needs it's own environment and stub in axis and (as stated 
above) in a multi-threaded environment a job is often responsible of it's own 
resources, every job needs to allocate and initialize it's environment and stub 
for each call (or keep one set initialized for every thread, but that's not 
feasible when one thread can be used for multiple purposes / jobs and/or 
threads can be added dynamically). And free it after the job is finished.
Apart from the (slight) performance drawback, this poses another problem: Part 
of the stub initialization includes reading the configuration file. When two 
threads try to do this simultaneously, the last one who tries this, fails.
Solutions to this problem might include:
- Create a clone function for the stub, so all threads can clone from template 
stub, instead of reading from disk.
- Separate the state information from the stub and put it in the environment, 
so the stub can be used read-only and shared by threads.


* Async model
The asynchronous call implementation of axis is based on creating new threads 
that just wait on a response. Threads are a rather expensive resource to use 
for just waiting on an IO completion (and then performing some small task). It 
might be better that the waiting on all outstanding IO is done by one single 
thread. The work after the IO completed can then be done by either that thread, 
or a (small and static) thread pool. That way, no threads have to be created / 
deleted on the flow, not more than one thread is waiting on IO and no high 
amount of threads will exist when a lot of asynchronous calls exist in parallel.
My axis knowledge is not enough to see solutions for this within axis right now.


What do you all think about these points?

Regards,

-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E [EMAIL PROTECTED]
I www.quintiq.com



This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.


[jira] Updated: (AXIS2C-1314) Memory leak in c code generation when adding the operations

2008-12-09 Thread Patrick van Beem (JIRA)

 [ 
https://issues.apache.org/jira/browse/AXIS2C-1314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick van Beem updated AXIS2C-1314:
-

Attachment: creating_the_operations_memleak.diff

 Memory leak in c code generation when adding the operations
 ---

 Key: AXIS2C-1314
 URL: https://issues.apache.org/jira/browse/AXIS2C-1314
 Project: Axis2-C
  Issue Type: Bug
  Components: code generation
 Environment: Win32/64
Reporter: Patrick van Beem
 Fix For: Current (Nightly)

 Attachments: creating_the_operations_memleak.diff

   Original Estimate: 1h
  Remaining Estimate: 1h

 The function axis2_op_create_with_qname() clones the name argument, so the 
 ownership of the original argument remains with the caller. So we should free 
 the allocated name:
op_qname = axutil_qname_create(env,
  div ,
  http://localhost/axis/Calculator;,
  NULL);
op = axis2_op_create_with_qname(env, op_qname);
axutil_qname_free(op_qname,env);  /* line added */

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Created: (AXIS2C-1314) Memory leak in c code generation when adding the operations

2008-12-09 Thread Patrick van Beem (JIRA)
Memory leak in c code generation when adding the operations
---

 Key: AXIS2C-1314
 URL: https://issues.apache.org/jira/browse/AXIS2C-1314
 Project: Axis2-C
  Issue Type: Bug
  Components: code generation
 Environment: Win32/64
Reporter: Patrick van Beem
 Fix For: Current (Nightly)
 Attachments: creating_the_operations_memleak.diff

The function axis2_op_create_with_qname() clones the name argument, so the 
ownership of the original argument remains with the caller. So we should free 
the allocated name:

   op_qname = axutil_qname_create(env,
 div ,
 http://localhost/axis/Calculator;,
 NULL);
   op = axis2_op_create_with_qname(env, op_qname);
   axutil_qname_free(op_qname,env);  /* line added */


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Created: (AXIS2C-1315) Use defines (or enums) for axutil_env_free_masked()

2008-12-09 Thread Patrick van Beem (JIRA)
Use defines (or enums) for axutil_env_free_masked()
---

 Key: AXIS2C-1315
 URL: https://issues.apache.org/jira/browse/AXIS2C-1315
 Project: Axis2-C
  Issue Type: Improvement
  Components: util
Affects Versions: Current (Nightly)
Reporter: Patrick van Beem
Priority: Trivial
 Fix For: Current (Nightly)
 Attachments: env_defines.diff

Use defines or constants for axutil_env_free_masked(). This makes code easier 
to read and understand:

AXIS_ENV_FREE_LOG- Frees the log
AXIS_ENV_FREE_ERROR  - Frees the error
AXIS_ENV_FREE_THREADPOOL - Frees the thread pool


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Created: (AXIS2C-1313) Memory leak in axis2_desc_add_child

2008-12-09 Thread Patrick van Beem (JIRA)
Memory leak in axis2_desc_add_child
---

 Key: AXIS2C-1313
 URL: https://issues.apache.org/jira/browse/AXIS2C-1313
 Project: Axis2-C
  Issue Type: Bug
  Components: core/description
 Environment: Win32/64
Reporter: Patrick van Beem
 Fix For: Current (Nightly)
 Attachments: axis2_desc_add_child.diff

axis2_desc_add_child() overwrites existing children with the same name. These 
become orphaned and are leaking memory (they'll never get freed).
Suggestion: Check for an existing child with the same key ad free it before 
replacing it with the new child:

AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_desc_add_child(
const axis2_desc_t * desc,
const axutil_env_t * env,
const axis2_char_t * key,
const void *child)
{
if (desc-children)
{
/* Added from here */
axis2_msg_t* msg = (axis2_msg_t *) axutil_hash_get(desc-children, key, 
AXIS2_HASH_KEY_STRING);
if ( msg != NULL )
{
axis2_msg_free(msg, env);
}
/* Added to here */
axutil_hash_set(desc-children, key, AXIS2_HASH_KEY_STRING, child);
return AXIS2_SUCCESS;
}
return AXIS2_FAILURE;
}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Updated: (AXIS2C-1315) Use defines (or enums) for axutil_env_free_masked()

2008-12-09 Thread Patrick van Beem (JIRA)

 [ 
https://issues.apache.org/jira/browse/AXIS2C-1315?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick van Beem updated AXIS2C-1315:
-

Attachment: env_defines.diff

 Use defines (or enums) for axutil_env_free_masked()
 ---

 Key: AXIS2C-1315
 URL: https://issues.apache.org/jira/browse/AXIS2C-1315
 Project: Axis2-C
  Issue Type: Improvement
  Components: util
Affects Versions: Current (Nightly)
Reporter: Patrick van Beem
Priority: Trivial
 Fix For: Current (Nightly)

 Attachments: env_defines.diff


 Use defines or constants for axutil_env_free_masked(). This makes code easier 
 to read and understand:
 AXIS_ENV_FREE_LOG- Frees the log
 AXIS_ENV_FREE_ERROR  - Frees the error
 AXIS_ENV_FREE_THREADPOOL - Frees the thread pool

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Created: (AXIS2C-1305) error not set when memory allocation fails in axis2_stub_start_op_... generated code

2008-12-03 Thread Patrick van Beem (JIRA)
error not set when memory allocation fails in axis2_stub_start_op_... generated 
code


 Key: AXIS2C-1305
 URL: https://issues.apache.org/jira/browse/AXIS2C-1305
 Project: Axis2-C
  Issue Type: Bug
  Components: code generation
Affects Versions: Current (Nightly)
 Environment: Win
Reporter: Patrick van Beem
Priority: Minor
 Fix For: Current (Nightly)


In the axis2_stub_start_op_... generated code, the error fields are not set 
when memory allocation fails. The using code will assume the call succeeded 
because no error is set, while it actually failed (although out-of-mem is 
hopefully a rare situation). 
See example code from the calculator example:

 void AXIS2_CALL
 axis2_stub_start_op_Calculator_add( axis2_stub_t *stub, const 
axutil_env_t *env,

:
:
callback_data = (struct axis2_stub_Calculator_add_callback_data*) 
AXIS2_MALLOC(env-allocator, 
sizeof(struct 
axis2_stub_Calculator_add_callback_data));
if(NULL == callback_data)
{
AXIS2_ERROR_SET(env-error, AXIS2_ERROR_NO_MEMORY, 
AXIS2_FAILURE);  //  === This line was not there!
AXIS2_LOG_ERROR( env-log, AXIS2_LOG_SI, Can not allocate 
memeory for the callback data structures);
return;
}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Updated: (AXIS2C-1305) error not set when memory allocation fails in axis2_stub_start_op_... generated code

2008-12-03 Thread Patrick van Beem (JIRA)

 [ 
https://issues.apache.org/jira/browse/AXIS2C-1305?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick van Beem updated AXIS2C-1305:
-

Attachment: mem-error.diff

 error not set when memory allocation fails in axis2_stub_start_op_... 
 generated code
 

 Key: AXIS2C-1305
 URL: https://issues.apache.org/jira/browse/AXIS2C-1305
 Project: Axis2-C
  Issue Type: Bug
  Components: code generation
Affects Versions: Current (Nightly)
 Environment: Win
Reporter: Patrick van Beem
Priority: Minor
 Fix For: Current (Nightly)

 Attachments: mem-error.diff

   Original Estimate: 2h
  Remaining Estimate: 2h

 In the axis2_stub_start_op_... generated code, the error fields are not set 
 when memory allocation fails. The using code will assume the call succeeded 
 because no error is set, while it actually failed (although out-of-mem is 
 hopefully a rare situation). 
 See example code from the calculator example:
  void AXIS2_CALL
  axis2_stub_start_op_Calculator_add( axis2_stub_t *stub, const 
 axutil_env_t *env,
 :
 :
 callback_data = (struct axis2_stub_Calculator_add_callback_data*) 
 AXIS2_MALLOC(env-allocator, 
 sizeof(struct 
 axis2_stub_Calculator_add_callback_data));
 if(NULL == callback_data)
 {
 AXIS2_ERROR_SET(env-error, AXIS2_ERROR_NO_MEMORY, 
 AXIS2_FAILURE);  //  === This line was not there!
 AXIS2_LOG_ERROR( env-log, AXIS2_LOG_SI, Can not allocate 
 memeory for the callback data structures);
 return;
 }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Duplicate function in generated axis2_stubs.

2008-12-03 Thread Patrick van Beem

In the main trunk, the C-code generator now generates the following function in 
the axis2_stub_xxx.c:

axiom_node_t* AXIS2_CALL
axis2_deserialize_buffer (
const axutil_env_t * env,
char *buffer);

This one is the same for every stub generated. So if you use more SOAP 
interfaces in one project, you get this function multiple times in one project. 
The linker does not like that...

Possible solutions include:
- Make it static, so the linker won't complain. Drawback: You will end up with 
multiple copies of the same function. (Intelligent linkers might remove these 
duplicates when optimizing.)
- Deliver it in a separate file outside of the generation process and tell the 
user to include it in their project. Drawback: Less user-friendly.
- Generate it in a separate file and tell the user to delete duplicates. 
Drawback: less user-friendly.

Any other solutions? Anyone? What's preferred?

-- 

 
Patrick van Beem
Sr. Software engineer
 
Quintiq
 
T +31 (0) 73 691 07 39
F +31 (0) 73 691 07 54
M +31 (0) 06 15 01 65 83
E [EMAIL PROTECTED]
I www.quintiq.com



This message contains information that may be privileged or confidential and is 
the property of Quintiq. It is only intended for the person to whom it is 
addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute or use this message or any 
part thereof. If you have received this message in error, please notify the 
sender immediately and delete all copies of this message. Please note that 
e-mails are susceptible to change, therefore they are not binding.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Created: (AXIS2C-1306) Duplicate function in generated axis2_stubs.

2008-12-03 Thread Patrick van Beem (JIRA)
Duplicate function in generated axis2_stubs.


 Key: AXIS2C-1306
 URL: https://issues.apache.org/jira/browse/AXIS2C-1306
 Project: Axis2-C
  Issue Type: Bug
  Components: code generation
Affects Versions: Current (Nightly)
 Environment: All
Reporter: Patrick van Beem
Priority: Minor
 Fix For: Current (Nightly)


In the main trunk, the C-code generator now generates the following function in 
the axis2_stub_xxx.c:

axiom_node_t* AXIS2_CALL
axis2_deserialize_buffer (
const axutil_env_t * env,
char *buffer);

This one is the same for every stub generated. So if you use more SOAP 
interfaces in one project, you get this function multiple times in one project. 
The linker does not like that...

Possible solutions include:
- Make it static, so the linker won't complain. Drawback: You will end up with 
multiple copies of the same function. (Intelligent linkers might remove these 
duplicates when optimizing.)
- Deliver it in a separate file outside of the generation process and tell the 
user to include it in their project. Drawback: Less user-friendly.
- Generate it in a separate file and tell the user to delete duplicates. 
Drawback: less user-friendly.

Dimuthu inputed:
I think this function should be moved to axiom_node functions. To something like

axiom_node_t *axiom_node_create_from_buffer(const axutil_env_t *env, 
axis2_char_t *buffer)

It will be very easy to work with in other applications also.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Updated: (AXIS2C-1296) Better usage of const and improved calling convention consistency in generated C-code

2008-11-26 Thread Patrick van Beem (JIRA)

 [ 
https://issues.apache.org/jira/browse/AXIS2C-1296?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick van Beem updated AXIS2C-1296:
-

Priority: Minor  (was: Major)

 Better usage of const and improved calling convention consistency in 
 generated C-code
 -

 Key: AXIS2C-1296
 URL: https://issues.apache.org/jira/browse/AXIS2C-1296
 Project: Axis2-C
  Issue Type: Improvement
  Components: code generation
Affects Versions: Current (Nightly)
 Environment: Windows
Reporter: Patrick van Beem
Priority: Minor
 Fix For: Current (Nightly)

 Attachments: update_linkage.diff

   Original Estimate: 2h
  Remaining Estimate: 2h

 * In the generated C-code, const is not used for some string arguments, where 
 one would expect this. This leads to unnecessary casts in user-code.
 * The calling convention of the generated C-code is different for different 
 functions in the same file (can lead to problems with some development tools).
 I will attach a patch.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Created: (AXIS2C-1296) Better usage of const and improved calling convention consistency in generated C-code

2008-11-25 Thread Patrick van Beem (JIRA)
Better usage of const and improved calling convention consistency in generated 
C-code
-

 Key: AXIS2C-1296
 URL: https://issues.apache.org/jira/browse/AXIS2C-1296
 Project: Axis2-C
  Issue Type: Improvement
  Components: code generation
Affects Versions: Current (Nightly)
 Environment: Windows
Reporter: Patrick van Beem
 Fix For: Current (Nightly)


* In the generated C-code, const is not used for some string arguments, where 
one would expect this. This leads to unnecessary casts in user-code.
* The calling convention of the generated C-code is different for different 
functions in the same file (can lead to problems with some development tools).
I will attach a patch.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[jira] Updated: (AXIS2C-1296) Better usage of const and improved calling convention consistency in generated C-code

2008-11-25 Thread Patrick van Beem (JIRA)

 [ 
https://issues.apache.org/jira/browse/AXIS2C-1296?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Patrick van Beem updated AXIS2C-1296:
-

Attachment: update_linkage.diff

 Better usage of const and improved calling convention consistency in 
 generated C-code
 -

 Key: AXIS2C-1296
 URL: https://issues.apache.org/jira/browse/AXIS2C-1296
 Project: Axis2-C
  Issue Type: Improvement
  Components: code generation
Affects Versions: Current (Nightly)
 Environment: Windows
Reporter: Patrick van Beem
 Fix For: Current (Nightly)

 Attachments: update_linkage.diff

   Original Estimate: 2h
  Remaining Estimate: 2h

 * In the generated C-code, const is not used for some string arguments, where 
 one would expect this. This leads to unnecessary casts in user-code.
 * The calling convention of the generated C-code is different for different 
 functions in the same file (can lead to problems with some development tools).
 I will attach a patch.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]