src/plugin.c: Stop write threads before calling shutdown callbacks.
[collectd.git] / src / plugin.c
index 73ec77a..d42493b 100644 (file)
@@ -1731,10 +1731,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;
@@ -1742,6 +1742,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);
@@ -1771,8 +1775,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