Merge branch 'collectd-5.4' into collectd-5.5
[collectd.git] / src / daemon / plugin.c
index e723af0..1deabba 100644 (file)
@@ -1850,10 +1850,10 @@ void plugin_shutdown_all (void)
 {
        llentry_t *le;
 
-       stop_read_threads ();
-
        destroy_all_callbacks (&list_init);
 
+       stop_read_threads ();
+
        pthread_mutex_lock (&read_lock);
        llist_destroy (read_list);
        read_list = NULL;
@@ -1861,6 +1861,10 @@ void plugin_shutdown_all (void)
 
        destroy_read_heap ();
 
+       /* blocks until all write threads have shut down. */
+       stop_write_threads ();
+
+       /* ask all plugins to write out the state they kept. */
        plugin_flush (/* plugin = */ NULL,
                        /* timeout = */ 0,
                        /* identifier = */ NULL);
@@ -1890,8 +1894,6 @@ void plugin_shutdown_all (void)
                plugin_set_ctx (old_ctx);
        }
 
-       stop_write_threads ();
-
        /* Write plugins which use the `user_data' pointer usually need the
         * same data available to the flush callback. If this is the case, set
         * the free_function to NULL when registering the flush callback and to