HTTP Connection Map Memory Leak - Known Limitation¶
Overview¶
The Apache Axis2/C HTTP transport layer has a minor 15-byte memory leak in unit test scenarios related to connection map management. This document describes the issue, its impact, and the rationale for accepting it as a known limitation.
Technical Details¶
Location¶
- File:
src/core/transport/http/sender/http_sender.c - Function:
axis2_http_sender_connection_map_add() - Line: 3756
- Code:
axutil_hash_set(connection_map, axutil_strdup(env, server), AXIS2_HASH_KEY_STRING, http_client);
Root Cause¶
- Memory Allocation: Server names are duplicated using
axutil_strdup()for use as hash table keys - Storage: Connection map is stored as a session-scoped property in the configuration context
- Cleanup Issue: Session property cleanup is not reliably triggered in short-lived unit test scenarios
- Cleanup Function: While
axis2_http_sender_connection_map_free()exists and correctly frees hash keys, it's not consistently invoked during test teardown
Leak Characteristics¶
- Size: 15 bytes per HTTP connection (length of "localhost:9090" + null terminator)
- Frequency: Once per service client session in unit tests
- Scope: Limited to unit test environments with short-lived clients
- Type: Non-accumulating (fixed per test run, doesn't grow over time)
Impact Assessment¶
Low Risk Factors¶
- Minimal Size: Only 15 bytes per test execution
- Test-Only: Does not occur in production HTTP server scenarios
- Non-Functional: No impact on HTTP transport functionality
- Non-Security: No security implications
- Contained: Leak is bounded and predictable
Detection¶
- Tool: AddressSanitizer during unit test execution
- Output:
Direct leak of 15 byte(s) in 1 object(s) allocated from axutil_strdup - Test:
test/core/clientapi/test_clientapi
Architectural Context¶
Why This Occurs¶
The HTTP connection map is designed for keep-alive connection management in long-running server scenarios. The session-scoped property cleanup mechanism works correctly for: - Long-lived HTTP server processes - Multi-request client sessions - Normal application lifecycle management
However, unit tests create a different execution pattern: - Very short-lived service clients - Immediate teardown after single request - Configuration context destroyed before session cleanup completes
Fix Complexity¶
Resolving this leak requires significant architectural changes:
-
Conditional Compilation Issues: Connection map functions are wrapped in
#ifndef AXIS2_LIBCURL_ENABLEDblocks that conflict with public API availability -
Property Lifecycle Management: Session-scoped property cleanup timing varies across different execution contexts
-
API Compatibility: Making internal cleanup functions public could break existing LIBCURL integration
-
Testing Infrastructure: Fundamental changes to how unit tests manage HTTP transport lifecycle
Attempted Solutions¶
1. Enhanced Cleanup Function¶
- Approach: Improved
axis2_http_sender_connection_map_free()with defensive programming - Result: Function works correctly but isn't consistently invoked
- Status: Function already handles key cleanup properly
2. Explicit Service Client Cleanup¶
- Approach: Added explicit connection map cleanup in
axis2_svc_client_free() - Result: Compilation errors due to function visibility
- Status: Abandoned due to architectural conflicts
3. Function Visibility Changes¶
- Approach: Made cleanup function public and added to header file
- Result: Conditional compilation conflicts with public API
- Status: Created more problems than it solved
Decision Rationale¶
Accept as Known Limitation¶
Given the risk/benefit analysis:
Low Impact: - 15 bytes per unit test run - No production implications - No functionality impact - Non-accumulating memory usage
High Complexity: - Requires architectural changes to conditional compilation - Risk of breaking LIBCURL integration - Potential API compatibility issues - Extensive testing required across build configurations
Conclusion: The cost of fixing this minor test-only leak outweighs the negligible benefits.
Monitoring and Management¶
Test Output Management¶
To reduce the perceived severity of this known limitation:
- Test Documentation: Clear indication that this is a known, acceptable limitation
- Filtered Reporting: Option to suppress this specific leak in test summaries
- Context: Ensure test output explains this is test-environment specific
Long-term Considerations¶
- Architecture Review: Future HTTP transport refactoring could address this naturally
- Test Framework: Evolution of unit test lifecycle management might resolve the cleanup timing
- Build System: Enhanced conditional compilation management could enable safer fixes
Conclusion¶
The 15-byte HTTP connection map memory leak represents a minor architectural limitation in session property cleanup for short-lived HTTP connections in unit test scenarios. The leak is:
- Contained and predictable
- Non-functional and non-security related
- Test-environment specific
- Architecturally complex to resolve safely
This limitation is documented and accepted as part of the current Axis2/C HTTP transport implementation, with the understanding that future architectural improvements may naturally resolve it.
Document Version: 1.0 Last Updated: November 2024 Status: Known Limitation - Accepted