Releases: lhmouse/mcfgthread
v1.8 General Availability Released
This major release contains the following changes since v1.7-ga.1:
- A unified
call_once()
implementation basing on SEH has been added. This implementation is capable of unwinding stack frames that have been established by any of MSVC, GCC or Clang on all non-x86 architectures, and frames that have been established by MSVC on x86. Note GCC has no support about SEH on x86 yet. - The accuracy of
_MCF_tick_count()
has been improved on Windows 10. - An irregular use of
extern "C++"
which will cause errors with GCC 15 has been fixed. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114933.
Full Changelog: v1.7-ga.1...v1.8-ga
v1.8 Beta Released
This major release contains the following changes since v1.7-ga.1:
- A unified
call_once()
implementation basing on SEH has been added. This implementation is capable of unwinding stack frames that have been established by any of MSVC, GCC or Clang on all non-x86 architectures, and frames that have been established by MSVC on x86. Note GCC has no support about SEH on x86 yet. - The accuracy of
_MCF_tick_count()
has been improved on Windows 10. - An irregular use of
extern "C++"
which will cause errors with GCC 15 has been fixed. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114933.
Full Changelog: v1.7-ga.1...v1.8-beta
v1.7 General Availability Released
This major release contains the following changes since v1.6-ga.1:
- The build system has been changed from autotools to Meson. Please read README.md about how to install and use Meson.
- All public headers and the DLL import library can now be consumed by the Microsoft C/C++ compiler, aka. MSVC or CL. This allows to link against mcfgthread DLL in a MSVC project. Please note that this support is very minimum and experimental. If you encounter a problem, please do open an issue.
- Wait operations that take relative timeouts (by passing a negative timeout value) no longer include system suspension, like
CLOCK_MONOTONIC
on Linux.
Full Changelog: v1.6-ga.1...v1.7-ga.1
v1.6 General Availability 2 Released
This major release contains the following changes since v1.5-ga.2:
- A compatibility manifest has been added to the DLL, declaring compatibility with Windows 7+.
- The size of a TLS table is now decreased correctly during rehashing if deleted keys are detected. Previously it caused the table size to grow if the process kept allocating and deallocating TLS keys.
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.5-ga.2..v1.6-ga.1
v1.6 Beta Released
This major release contains the following changes since v1.5-ga.2:
- A compatibility manifest has been added to the DLL, declaring compatibility with Windows 7+.
- The size of a TLS table is now decreased correctly during rehashing if deleted keys are detected. Previously it caused the table size to grow if the process kept allocating and deallocating TLS keys.
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.5-ga.2..v1.6-beta.1
v1.5 General Availability 2 Released
This minor release contains the following changes since v1.5-ga.2:
- In C++,
__MCF_STATIC_ASSERT_T()
no longer fails to compile when the argument is of a non-boolean type. - A potential deadlock condition has been fixed. (#86)
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.5-ga.1..v1.5-ga.2
v1.5 General Availability Released
This major release contains the following change since v1.4-ga.1:
- TLS and per-thread exit callbacks are now functional in threads that have been created by other libraries, e.g. by
CreateThread()
orpthread_create()
. (#81)- Due to the nature of implementation, access to
__thread
orthread_local
objects in cleanup callbacks ofpthread_key_create()
might effect use-after-free faults. If you encounter such problems, please do not hesitate to open a new issue.
- Due to the nature of implementation, access to
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.4-ga.1..v1.5-ga.1
v1.5 Beta Released
This major release contains the following change since v1.4-ga.1:
- TLS and per-thread exit callbacks are now functional in threads that have been created by other libraries, e.g. by
CreateThread()
orpthread_create()
. (#81)- Due to the nature of implementation, access to
__thread
orthread_local
objects in cleanup callbacks ofpthread_key_create()
might effect use-after-free faults. If you encounter such problems, please do not hesitate to open a new issue.
- Due to the nature of implementation, access to
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.4-ga.1..v1.5-beta.1
v1.4 General Availablity Released
This major release contains the following changes since v1.3-ga.3:
- A new function
_MCF_thread_new_aligned()
has been introduced for allocating aligned user-defined data. - A new function
_MCF_tls_key_get_destructor()
has been added, which gets the destructor of a TLS key. - It is now possible to manage the reference count of a TLS key with
_MCF_tls_key_get_ref()
and_MCF_tls_key_drop_ref()
. - A new function
_MCF_tls_xset()
has been added, which sets a new value and optionally gets its old value. - Some new functions have been added to retrieve system information:
_MCF_get_page_size()
,_MCF_get_processor_count()
,_MCF_get_active_processor_mask()
. - A new header
<mcfgthread/cxx11.hpp>
has been added, which contains reference implementations of C++11std::once_flag
,std::mutex
,std::timed_mutex
,std::recursive_mutex
,std::recursive_timed_mutex
,std::conditon_variable
andstd::thread
. This header is a drop-in replacement for toolchains that lack standard threading support, such as GCC with thewin32
thread model.
instead of zero. This is an ABI break if code checks for success by comparing the result with zero. - C11 functions are now 'true' functions with file scope.
- When creating a thread, if no user-defined data should be requested by passing a size of zero to
_MCF_thread_new()
,_MCF_thread_get_data()
now returns a null pointer on the new thread. Specifically, this behavior is now consistent with the main thread.
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.3-ga.3..v1.4-ga.1
v1.4 Beta Released
This major release contains the following changes since v1.3-ga.3:
- A new function
_MCF_thread_new_aligned()
has been introduced for allocating aligned user-defined data. - A new function
_MCF_tls_key_get_destructor()
has been added, which gets the destructor of a TLS key. - It is now possible to manage the reference count of a TLS key with
_MCF_tls_key_get_ref()
and_MCF_tls_key_drop_ref()
. - A new function
_MCF_tls_xset()
has been added, which sets a new value and optionally gets its old value. - Some new functions have been added to retrieve system information:
_MCF_get_page_size()
,_MCF_get_processor_count()
,_MCF_get_active_processor_mask()
. - A new header
<mcfgthread/cxx11.hpp>
has been added, which contains reference implementations of C++11std::once_flag
,std::mutex
,std::timed_mutex
,std::recursive_mutex
,std::recursive_timed_mutex
,std::conditon_variable
andstd::thread
. This header is a drop-in replacement for toolchains that lack standard threading support, such as GCC with thewin32
thread model.
instead of zero. This is an ABI break if code checks for success by comparing the result with zero. - C11 functions are now 'true' functions with file scope.
- When creating a thread, if no user-defined data should be requested by passing a size of zero to
_MCF_thread_new()
,_MCF_thread_get_data()
now returns a null pointer on the new thread. Specifically, this behavior is now consistent with the main thread.
Full Changelog: https://github.com/lhmouse/mcfgthread/compare/v1.3-ga.3..v1.4-beta.1