X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fdaemon%2Fplugin.c;h=1bee8cdd48693da128558e7579af53b37a370106;hb=474d70e02d04de92aa7503b3887989729bbbff02;hp=2ccc68c21ccc2d1fa566b602e0186085baae718a;hpb=f8e1e81d433c5b4e06792c2617abf0e6ec9e76d9;p=collectd.git diff --git a/src/daemon/plugin.c b/src/daemon/plugin.c index 2ccc68c2..1bee8cdd 100644 --- a/src/daemon/plugin.c +++ b/src/daemon/plugin.c @@ -1974,10 +1974,10 @@ int plugin_shutdown_all (void) llentry_t *le; int ret = 0; // Assume success. - stop_read_threads (); - destroy_all_callbacks (&list_init); + stop_read_threads (); + pthread_mutex_lock (&read_lock); llist_destroy (read_list); read_list = NULL; @@ -1985,6 +1985,10 @@ int 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); @@ -2015,8 +2019,6 @@ int 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