691 Commits

Author SHA1 Message Date
木头云
0f8bd3415c fix(log): add missing LIBIPC_LOG() in get_info member function
- src/libipc/ipc.cpp:
  * Add LIBIPC_LOG() to chunk_storages::get_info() member function
  * This was missing, causing 'log' to be undeclared at line 245
  * The get_info() function uses log.error() for chunk storage errors

This completes the fix for all missing LIBIPC_LOG() initializations
in the ipc.cpp file.
2025-12-15 11:33:17 +00:00
木头云
73d59ba20e fix(log): add missing LIBIPC_LOG() and fix lambda log capture
- src/libipc/prod_cons.h:
  * Add LIBIPC_LOG() to second force_push() template function
  * This was missing, causing 'log' to be undeclared at line 379

- src/libipc/ipc.cpp:
  * Add LIBIPC_LOG() to static send() function (line 590)
  * Capture log by reference in outer lambda: [tm, &log]
  * Capture log by reference in inner lambda: [tm, &log, info, que, msg_id]
  * This fixes 'log' was not declared error in lambda at line 598
  * The log variable is now properly captured from the outer send() scope

These fixes ensure that all functions using log.debug/error/warning
have proper LIBIPC_LOG() initialization and lambda captures.
2025-12-15 10:21:40 +00:00
木头云
2b1ed4bc51 fix(log): remove remaining format specifiers and fix malformed log calls
- src/libipc/platform/posix/condition.h:
  * Replace all %d and %s format specifiers with stream-based syntax
  * Update log.error() calls to use proper streaming (e.g., "[", eno, "]")

- src/libipc/platform/posix/semaphore_impl.h:
  * Remove %d format specifiers from log.error() calls
  * Fix malformed parentheses (e.g., .c_str(, ""))
  * Remove unnecessary empty string arguments
  * Use stream-based logging consistently

- src/libipc/platform/win/mutex.h:
  * Fix malformed GetLastError() parentheses
  * Remove %lu format specifier, use explicit cast instead
  * Update to stream-based logging syntax

- src/libipc/platform/win/semaphore.h:
  * Fix malformed GetLastError() parentheses
  * Remove %lu format specifier, use explicit cast instead
  * Update to stream-based logging syntax

All format specifiers (%d, %s, %zd, %p, %lu) have been removed and replaced
with proper C++ stream-based logging that is type-safe and consistent with
the new imp/log interface.
2025-12-15 10:06:52 +00:00
木头云
1664526c40 fix(log): fix malformed log calls and add missing LIBIPC_LOG() in shm files
- src/libipc/platform/posix/shm_posix.cpp:
  * Add LIBIPC_LOG() to acquire() and get_mem() functions
  * Fix malformed log.error() calls: remove format specifiers (%d, %zd, %p)
  * Fix parentheses errors in log.error() calls (e.g., .c_str(, ""))
  * Use stream-based logging instead of printf-style formatting

- src/libipc/platform/win/shm_win.cpp:
  * Add LIBIPC_LOG() to acquire() and get_mem() functions
  * Fix malformed log.error() calls with GetLastError()
  * Fix parentheses errors in log.error() calls
  * Ensure consistent stream-based logging syntax

These fixes address syntax errors that would have caused compilation failures.
2025-12-15 10:02:23 +00:00
木头云
2ff5c94479 fix(log): add missing LIBIPC_LOG() to all functions using log interface
- Add LIBIPC_LOG() to functions in platform files that use log.error/warning/debug
- Fixed files:
  - POSIX platform: mutex.h, semaphore_impl.h, shm_posix.cpp
  - Windows platform: get_sa.h, mutex.h, semaphore.h, shm_win.cpp
  - Sync layer: condition.cpp, mutex.cpp, semaphore.cpp

All functions using the new log interface now properly initialize the logger with LIBIPC_LOG()
2025-12-15 09:48:54 +00:00
木头云
298354973a fix(log): add missing LIBIPC_LOG() in posix get_wait_time.h
- Add LIBIPC_LOG() to calc_wait_time() function
- Add LIBIPC_LOG() to make_timespec() function
- Both functions use log.error() and need the logger initialization
2025-12-15 09:47:39 +00:00
木头云
0c4421d5c2 refactor(log): fix remaining complex log format calls
- Fix multi-parameter log calls with complex formatting in POSIX and Windows platforms
- Replace remaining ipc::error() and ipc::log() calls with log.error() and log.warning()
- Handle special cases:
  - POSIX condition.h: pthread_cond_timedwait multi-param formatting
  - POSIX get_wait_time.h: calc_wait_time multi-param formatting
  - POSIX semaphore_impl.h: sem_timedwait multi-param formatting
  - Windows mutex.h: WaitForSingleObject with hex formatting, WAIT_ABANDONED as warning
  - Windows semaphore.h: WaitForSingleObject and ReleaseSemaphore calls
- Use std::hex/std::dec for hexadecimal formatting in Windows platform
- All log interface migrations now complete
2025-12-15 09:40:37 +00:00
木头云
e9a7dbaa74 refactor(log): replace utility/log with imp/log in all platform and sync files
- Replace include "libipc/utility/log.h" with "libipc/imp/log.h" in all files
- Add LIBIPC_LOG() to functions that use logging
- Replace ipc::error() and ipc::log() calls with log.error() and log.debug()
- Use type-safe streaming interface instead of printf-style formatting
- Remove manual newline characters from log messages

Modified files:
- Linux platform: condition.h, get_wait_time.h, mutex.h, sync_obj_impl.h
- POSIX platform: condition.h, get_wait_time.h, mutex.h, semaphore_impl.h, shm_posix.cpp
- Windows platform: condition.h, get_sa.h, mutex.h, semaphore.h, shm_win.cpp
- Sync layer: condition.cpp, mutex.cpp, semaphore.cpp

Total: 17 files updated with comprehensive log interface migration
2025-12-15 09:37:50 +00:00
木头云
6143c23fd3 refactor(log): replace utility/log with imp/log in ipc.cpp
- Replace include "libipc/utility/log.h" with "libipc/imp/log.h"
- Add LIBIPC_LOG() at the beginning of functions that use logging
- Replace all ipc::error() calls with log.error()
- Replace all ipc::log() calls with log.debug() or log.error() based on context
- Modified functions:
  - cc_acc(): error logging for shm acquire failure
  - make_handle(): error logging for chunk storage operations
  - find_storage(): error logging for invalid storage id
  - release_storage(): error logging for invalid storage id
  - recycle_storage(): error logging for invalid storage id
  - clear_message(): error logging for invalid message size
  - send(): error logging for various send failures, debug logging for force_push
  - recv(): error logging for various recv failures
- Use type-safe streaming interface instead of printf-style formatting
- Remove manual newline characters from log messages
- Total changes: 19 log call sites updated
2025-12-15 09:02:00 +00:00
木头云
309baf77bc refactor(log): change log level from warning to debug in prod_cons.h
- Update force_push() log calls to use log.debug() instead of log.warning()
- Debug level is more appropriate for internal force_push diagnostic messages
2025-12-15 08:47:42 +00:00
木头云
bf62216e8d refactor(log): replace utility/log with imp/log in prod_cons.h and queue.h
- Replace include "libipc/utility/log.h" with "libipc/imp/log.h"
- prod_cons.h: Replace ipc::log() calls with LIBIPC_LOG() + log.warning()
  - Updated 2 force_push() template functions in broadcast implementations
  - Changed log level from generic log to warning for force_push scenarios
- queue.h: Replace ipc::error() calls with LIBIPC_LOG() + log.error()
  - Updated queue_conn::open() template function
- Use type-safe streaming interface instead of printf-style formatting
- Remove manual newline characters from log messages
2025-12-15 08:43:13 +00:00
木头云
2ec1914691 refactor(log): replace utility/log with imp/log in shm.cpp
- Replace include "libipc/utility/log.h" with "libipc/imp/log.h"
- Replace ipc::error() calls with LIBIPC_LOG() + log.error()
- Use type-safe streaming interface instead of printf-style formatting
- Remove manual newline characters from log messages
2025-12-15 08:33:43 +00:00
木头云
78bbb05322 feat(ci): exclude 3rdparty folder from codecov coverage
- Add codecov.yml configuration to exclude 3rdparty, test, and demo directories
- Update GitHub Actions workflow with exclude parameter in codecov-action
- Ensures only project source code is included in coverage metrics

This provides double protection:
1. codecov.yml filters on CodeCov service side
2. workflow exclude filters during upload
2025-12-12 07:04:31 +00:00
木头云
dc809e0da8 feat(ci): add CodeCov workflow for test coverage reporting 2025-12-12 07:04:31 +00:00
mutouyun
3ca2e93b19 feat(ci): add codecov test coverage support to master branch
Add CodeCov test coverage configuration:
- Add LIBIPC_CODECOV option to CMakeLists.txt with coverage compilation flags
- Add CodeCov badge to README.md for coverage status display

Note: The codecov.yml workflow file needs to be added manually
or requires workflows permission to push.
2025-12-12 07:04:31 +00:00
mutouyun
e38d3ed801 fix(platform): Add FreeBSD detection and include detect_plat.h in detail.h
Fixed two critical issues from the rebase:
1. Added LIBIPC_OS_FREEBSD macro definition in detect_plat.h to enable
   FreeBSD platform detection alongside other OS checks
2. Added missing #include "libipc/imp/detect_plat.h" in detail.h to
   properly include platform detection macros

These fixes ensure FreeBSD compilation will work correctly with the
unified platform detection system.
2025-12-12 07:04:31 +00:00
木头云
542706117a fix(shm_win): Use mem::$delete instead of mem::free in release()
The acquire() function allocates id_info_t using mem::$new<id_info_t>(),
so the release() function must use mem::$delete(ii) to deallocate it,
not mem::free(ii). This ensures proper allocation/deallocation pairing.

Issue: Memory allocated with mem::$new must be freed with mem::$delete
to maintain consistent memory management semantics.
2025-12-12 07:04:31 +00:00
木头云
fc7fa158b6 fix(test): Update test.h include paths after master rebase
After rebasing onto master, test.h was moved to test/archive/.
Updated include paths in test subdirectories:
- test/imp/*.cpp: "test.h" -> "../archive/test.h"
- test/mem/*.cpp: "test.h" -> "../archive/test.h"
- test/concur/*.cpp: "test.h" -> "../archive/test.h"

This ensures all test files can properly find the test header
after the directory reorganization in master branch.
2025-12-12 07:04:31 +00:00
木头云
cc33f73eec fix(msvc): Fix C4138 warning by adding space before commented parameter names
ISSUE:
MSVC compiler reports warning C4138: '*/' found outside of comment
for patterns like 'void */*p*/' where the pointer asterisk is immediately
followed by a comment start.

AFFECTED FILES:
- include/libipc/mem/new.h (line 30)
- src/libipc/platform/win/mutex.h (line 54)
- src/libipc/platform/win/semaphore.h (line 53)

CHANGES:
Changed 'type */*param*/' to 'type * /*param*/' (added space before comment)

Examples:
- void */*p*/       → void * /*p*/
- char const */*name*/ → char const * /*name*/

This resolves the MSVC warning while maintaining code functionality
and keeping the commented-out parameter names for documentation.
2025-12-12 07:04:31 +00:00
木头云
489e75870d fix(test): Fix buffer overflow in data_set caused by array placement new
ROOT CAUSE:
Array placement new (::new(buffer) T[N]) adds a hidden cookie (array size)
before the array elements in some compiler implementations (particularly MSVC).
The cookie is used for proper array destruction. However, the data_set buffer
was sized only for sizeof(T[N]), not accounting for the cookie overhead.

ISSUE:
- Buffer allocated: sizeof(rand_buf[LoopCount])
- Actual space needed: sizeof(cookie) + sizeof(rand_buf[LoopCount])
- Result: Cookie and part of array written beyond buffer boundary
- Consequence: Memory corruption, leading to invalid pointers in buffer objects

SYMPTOM:
In IPC.1v1 test, memcpy(buf, data, size) crashed because 'data' pointer
(from buffer::data()) pointed to corrupted/invalid memory address.

SOLUTION:
Replace array placement new with individual element placement new:
- Cast buffer to array pointer directly (no cookie needed)
- Construct each element individually with placement new
- Manually destroy each element in destructor

This approach:
- Eliminates cookie overhead
- Provides precise control over object lifetime
- Works consistently across all compilers

Fixes crash in IPC.1v1 test case on MSVC.
2025-12-12 07:04:31 +00:00
木头云
8731413d30 refactor(uninitialized): Improve construct() overload resolution
IMPROVEMENTS:
1. Add explicit zero-argument overload to avoid SFINAE ambiguity
2. Require at least one argument (A1) for parameterized overloads
3. Better separation between direct initialization and aggregate initialization

BENEFITS:
- Clearer intent: zero-argument construction is explicitly handled
- Avoids potential SFINAE ambiguity when empty parameter pack is used
- More maintainable: easier to understand which overload is selected
- Consistent with modern C++ best practices for variadic templates

TECHNICAL DETAILS:
- Zero-arg overload: Always uses T() for value initialization
- One-or-more-arg overload: Uses SFINAE to choose between:
  * T(args...) for types with matching constructor
  * T{args...} for aggregate types or types with initializer_list ctor

This is a code quality improvement and does not fix any compilation issues,
but provides better template overload resolution.
2025-12-12 07:04:31 +00:00
木头云
c39a0cba49 fix(container_allocator): Fix MSVC compilation by correcting allocator semantics
ROOT CAUSE:
The allocate() function was incorrectly constructing objects during memory
allocation, violating C++ allocator requirements. MSVC's std::_Tree_node has
a deleted default constructor, causing compilation failure.

CHANGES:
- container_allocator::allocate() now only allocates raw memory without
  constructing objects (removed mem::$new and ipc::construct calls)
- container_allocator::deallocate() now only frees memory without
  destroying objects (removed mem::$delete and ipc::destroy_n calls)

WHY THIS FIXES THE ISSUE:
C++ allocator semantics require strict separation:
  * allocate()   -> raw memory allocation only
  * construct()  -> object construction with proper arguments
  * destroy()    -> object destruction
  * deallocate() -> memory deallocation only

Standard containers (like std::map) call construct() with proper arguments
(key, value) to initialize nodes, not allocate(). Since std::_Tree_node in
MSVC has no default constructor (= delete), attempting to construct it
without arguments always fails.

Fixes MSVC 2017 compilation error:
  error C2280: 'std::_Tree_node<...>::_Tree_node(void)':
  attempting to reference a deleted function
2025-12-12 07:04:31 +00:00
mutouyun
90b7badcee Replace custom hash struct with std::hash in unordered_map definition 2025-12-12 07:04:31 +00:00
mutouyun
165060e0b6 Fix the issue caused by inconsistent lifecycle of the global IPC object. 2025-12-12 07:04:31 +00:00
mutouyun
63f35484d7 Refactoring the generic memory allocator 2025-12-12 07:04:31 +00:00
mutouyun
716992cade Reimplement the allocator required for the container type with $new 2025-12-12 07:04:31 +00:00
mutouyun
41529e8eb3 Use $new instead of alloc 2025-12-12 07:04:31 +00:00
mutouyun
189d5f348c Simplify the implementation of memory allocation management 2025-12-12 07:04:31 +00:00
mutouyun
39c7c5c70b The memory allocator supports runtime dynamic size memory allocation 2025-12-12 07:04:31 +00:00
mutouyun
00ee30e339 libipc/memory/resource.h => libipc/mem/resource.h 2025-12-12 07:04:31 +00:00
mutouyun
22c805c7cb Add $new 2025-12-12 07:04:31 +00:00
mutouyun
9a2e1b237a Add block_pool 2025-12-12 07:04:31 +00:00
mutouyun
0035764e0d Adjust the allocator name 2025-12-12 07:04:31 +00:00
mutouyun
93d6c44771 Simplify verify_args function to fix error C3249 2025-12-12 07:04:31 +00:00
mutouyun
9276fcbcda Fix fmt function to handle null pointers and return empty string 2025-12-12 07:04:31 +00:00
木头云
077288e911 Update c-cpp.yml 2025-12-12 07:04:31 +00:00
mutouyun
d00dcbbf15 Fix fmt function to handle empty strings and update make_prefix template parameters 2025-12-12 07:04:31 +00:00
mutouyun
c77a29e9fb Optimize memory_resource & add monotonic_buffer_resource 2025-12-12 07:04:31 +00:00
mutouyun
3693a85aca Add intrusive_stack 2025-12-12 07:04:31 +00:00
mutouyun
397b362338 Add allocator and rewrite allocator_wrapper 2025-12-12 07:04:31 +00:00
mutouyun
7536757064 Optimized partial implementation using fmt 2025-12-12 07:04:31 +00:00
mutouyun
106837ffce Start refactoring memory management, adding memory_resource 2025-12-12 07:04:31 +00:00
mutouyun
975ecba2e3 Update platform-specific feature macros to new interfaces in imp 2025-12-12 07:04:31 +00:00
mutouyun
52951e44f8 Add system 2025-12-12 07:04:31 +00:00
mutouyun
5f75f1d738 Add result 2025-12-12 07:04:31 +00:00
mutouyun
8ec7c6a486 IPC_EXPORT => LIBIPC_EXPORT 2025-12-12 07:04:31 +00:00
mutouyun
ecd1aaac40 Add log 2025-12-12 07:04:31 +00:00
mutouyun
208ac889e7 Add error 2025-12-12 07:04:31 +00:00
mutouyun
d20f88c349 Added fmt support for byte 2025-12-12 07:04:31 +00:00
mutouyun
bc29c85c1a Add fmt 2025-12-12 07:04:31 +00:00