Утечки памяти в Axis2C?

Я работаю с Axis2C. Я провожу некоторый тест с простым клиентом веб-сервиса для тестирования этой платформы.

Я написал клиент, используя несколько примеров и документацию, предоставленную Apache. Клиент работает нормально, и я решил проверить его с помощью valgrind, чтобы убедиться в правильности управления памятью.

Я использовал функции, упомянутые в примерах и документации, чтобы освободить память (в данном конкретном случае):

// to free the requst struct.
 adb_EncryptRequest_free(request, env);

 // to free the stub.
 axis2_stub_free(stub, env);

 // to free the environment.
 axutil_env_free((axutil_env_t*) env);

У меня нет "дикого" нового или malloc в коде.

Однако Valgrind сообщает следующее:

LEAK SUMMARY:
==2287==    definitely lost: 56 bytes in 3 blocks
==2287==    indirectly lost: 156 bytes in 5 blocks
==2287==      possibly lost: 0 bytes in 0 blocks
==2287==    still reachable: 20 bytes in 1 blocks
==2287==         suppressed: 0 bytes in 0 blocks

Я перезапускаю Valgind с параметром --leak-check=full, но, насколько я понимаю, проблемы с памятью находятся в файлах axis2c *.so.

HEAP SUMMARY:
==2292==     in use at exit: 232 bytes in 9 blocks
==2292==   total heap usage: 13,180 allocs, 13,171 frees, 760,422 bytes allocated
==2292== 
==2292== 68 (16 direct, 52 indirect) bytes in 1 blocks are definitely lost in loss record 7 of 9
==2292==    at 0x400677E: malloc (vg_replace_malloc.c:195)
==2292==    by 0x40C2032: axutil_allocator_malloc_impl (in /home/EMBT/Downloads/axis2c-bin-1.6.0-linux/lib/libaxutil.so.0.6.0)
==2292==    by 0x40C5C07: axutil_string_create (in /home/EMBT/Downloads/axis2c-bin-1.6.0-linux/lib/libaxutil.so.0.6.0)
==2292==    by 0x804E024: axis2_stub_start_op_PoCPCIServiceService_GetEncryptedData (axis2_stub_PoCPCIServiceService.c:493)
==2292==    by 0x804E759: main (main.c:59)
==2292== 
==2292== 72 (20 direct, 52 indirect) bytes in 1 blocks are definitely lost in loss record 8 of 9
==2292==    at 0x400677E: malloc (vg_replace_malloc.c:195)
==2292==    by 0x40C2032: axutil_allocator_malloc_impl (in /home/EMBT/Downloads/axis2c-bin-1.6.0-linux/lib/libaxutil.so.0.6.0)
==2292==    by 0x40C74F5: axutil_qname_create (in /home/EMBT/Downloads/axis2c-bin-1.6.0-linux/lib/libaxutil.so.0.6.0)
==2292==    by 0x804D515: axis2_stub_populate_services_for_PoCPCIServiceService (axis2_stub_PoCPCIServiceService.c:91)
==2292==    by 0x804D395: axis2_stub_create_PoCPCIServiceService (axis2_stub_PoCPCIServiceService.c:48)
==2292==    by 0x804E6ED: main (main.c:46)
==2292== 
==2292== 72 (20 direct, 52 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 9
==2292==    at 0x400677E: malloc (vg_replace_malloc.c:195)
==2292==    by 0x40C2032: axutil_allocator_malloc_impl (in /home/EMBT/Downloads/axis2c-bin-1.6.0-linux/lib/libaxutil.so.0.6.0)
==2292==    by 0x40C74F5: axutil_qname_create (in /home/EMBT/Downloads/axis2c-bin-1.6.0-linux/lib/libaxutil.so.0.6.0)
==2292==    by 0x804D64F: axis2_stub_populate_services_for_PoCPCIServiceService (axis2_stub_PoCPCIServiceService.c:111)
==2292==    by 0x804D395: axis2_stub_create_PoCPCIServiceService (axis2_stub_PoCPCIServiceService.c:48)
==2292==    by 0x804E6ED: main (main.c:46)

Если я прав, есть ли способ, которым я могу решить это?

Спасибо за вашу помощь.

С уважением.

2 ответа

К сожалению, Axis2/C имеет много утечек памяти.

Мы запустили неофициальный проект axis2c, чтобы обеспечить наиболее стабильную сборку Axis2/C, чем оригинальная.

В этом проекте исправлен список проблем.

Без кода его просто угадать. Я использовал axis2c (1.7.x от svn) и не заметил никаких утечек (проверено визуальным детектором утечек в vc).

Я только освободил клиент службы и окружающую среду.

 axis2_svc_client_free(svc, env);
 axutil_env_free(env);

В соответствии с заголовком комментария данные, которые вы связываете с помощью "axis2_svc_client_send_receive" (который используется внутри сгенерированного кода), освобождаются сервисным клиентом.

Другие вопросы по тегам