platform: make global logging cache for NMPlatform's sysctl values thread-safe
We have a cache for sysctl values, so that we can log changes and previous values. When resetting the log level, we prune that cache, which is done by _nm_logging_clear_platform_logging_cache(). That function is called by nm_logging_setup(), which is guaranteed to only happen on the main thread. NMPlatform in general is not thread safe (meaning, that the same NMPlatform instance cannot be used by multiple threads at the same time). There is however a reasonable aim that you could use different NMPlatform instances on their own threads. That currently doesn't work, mainly due to nm-logging which always must be done from the main thread -- unless we would set NM_THREAD_SAFE_ON_MAIN_THREAD in all of NMPlatform (which would be too expensive for something we don't actually need). That means also the sysctl getter must only be called on the main thread an all was good already. Still, we could have NMPlatform usable from multiple thread by setting NM_THREAD_SAFE_ON_MAIN_THREAD. As we are almost there to have the code thread-safe, make accessing the sysctl value cache thread-safe (even if we currently don't actually access it from multiple thread).
This commit is contained in:
@@ -402,7 +402,10 @@ nm_logging_setup(const char *level, const char *domains, char **bad_domains, GEr
|
||||
if (had_platform_debug && !_nm_logging_enabled_lockfree(LOGL_DEBUG, LOGD_PLATFORM)) {
|
||||
/* when debug logging is enabled, platform will cache all access to
|
||||
* sysctl. When the user disables debug-logging, we want to clear that
|
||||
* cache right away. */
|
||||
* cache right away.
|
||||
*
|
||||
* It's important that we call this without having a lock on "log", because
|
||||
* otherwise we might deadlock. */
|
||||
_nm_logging_clear_platform_logging_cache();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user