Skip to content
  • Thomas Haller's avatar
    logging: make nm-logging thread-safe · fcfd4f4f
    Thomas Haller authored
    NetworkManager is single-threaded and uses a mainloop.
    
    However, sometimes we may need multiple threads. For example, we will
    need to write sysctl values asynchronously, using the glib thread-pool.
    For that to work, we also need to switch the network-namespace of the
    thread-pool thread. We want to use NMPNetns for that. Hence it's better
    to have NMPNetns thread-safe, instead of coming up with a duplicate
    implementation. But NMPNetns may want to log, so we also need nm-logging
    thread-safe.
    
    In general, code under "shared/nm-utils" and nm-logging should be usable
    from multiple threads. It's simpler to make this code thread-safe than
    re-implementing it. Also, it's a bad limitation to be unable to log
    from other threads. If there is an error, the best we can often do is to
    log about it.
    
    Make nm-logging thread-safe. Actually, we only need to be able to log
    from multiple threads. We don't need to setup or configure logging from
    multiple threads. This restriction allows us to access logging from the
    main-thread without any thread-synchronization (because all changes in
    the logging setup are also done from the main-thread).
    
    So, while logging from other threads requires a mutex, logging from the
    main-thread is lock-free.
    fcfd4f4f