2012-04-11 15 views
0

Ich arbeite mit Axis2C. Ich mache einen Test mit einem einfachen Web-Service-Client, um dieses Framework zu testen.Axis2C Speicherlecks?

Ich schrieb den Client mit einigen Beispielen und der Dokumentation von Apache. Der Client funktioniert einwandfrei und ich entschied mich, ihn mit valgrind zu testen, um sicherzustellen, dass die Speicherverwaltung korrekt ist.

ich verwenden, um die in den Beispielen und Dokumentation zu freien Speichern erwähnten Funktionen (in diesem speziellen Fall):

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

Ich habe keine „wilde“ neue oder malloc im Code.

jedoch berichtet valgrind folgenden:

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 

ich erneut ausführen Valgind mit --leak-check = voll, aber als ich die Speicherprobleme zu verstehen sind in den axis2c * .so-Dateien entfernt.

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) 

Wenn ich richtig bin, gibt es einen Weg, ich kann es lösen?

Danke für Ihre Hilfe.

Grüße.

+0

Leider ist Axis2/C voller Speicherlecks, zumindest aus der serverseitigen Perspektive (ich habe keine Clients mit Axis geschrieben): 1) serverseitiger Servicecode, der aus WSDL generiert wird, hat Lecks; 2) "einfacher HTTP-Server" hat Lecks; 3) CGI-Modul hat Lecks (die kein Problem sind, solange es als Standard-CGI verwendet wird, aber kritisch werden, wenn Sie versuchen, den Code wiederzuverwenden oder in etwas wie FastCGI auszuführen). Ich habe Patches für alle Lecks gepostet, die ich bis jetzt bei Axis2/C JIRA gefunden oder repariert habe, aber das Projekt wird nicht aktiv gepflegt: Es dauert Monate, um einfache Korrekturen zu überprüfen und zu committen. – vond

Antwort

0

Ohne den Code ist es nur raten. Ich benutzte axis2c (1.7.x von svn) und bemerkte keine Lecks (überprüft mit visual leak detector in vc).

Ich habe nur den Service-Client und die Umgebung freigegeben.

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

Nach der header Commentar der Daten, die Sie mit dem "axis2_svc_client_send_receive" bind (die im Inneren des generatd Code verwendet wird) wird durch den Service-Client befreit.