use kern.cp_times sysctl for FreeBSD smp support
[collectd.git] / src / plugin.c
index b150cf6..5d882e6 100644 (file)
@@ -888,6 +888,14 @@ int plugin_unregister_read (const char *name) /* {{{ */
        }
 
        le = llist_search (read_list, name);
+       if (le == NULL)
+       {
+               pthread_mutex_unlock (&read_lock);
+               WARNING ("plugin_unregister_read: No such read function: %s",
+                               name);
+               return (-ENOENT);
+       }
+
        llist_remove (read_list, le);
 
        rf = le->value;
@@ -1205,8 +1213,14 @@ void plugin_shutdown_all (void)
                (*callback) ();
        }
 
-       destroy_all_callbacks (&list_write);
+       /* 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
+        * the real free function when registering the write callback. This way
+        * the data isn't freed twice. */
        destroy_all_callbacks (&list_flush);
+       destroy_all_callbacks (&list_write);
+
        destroy_all_callbacks (&list_notification);
        destroy_all_callbacks (&list_shutdown);
        destroy_all_callbacks (&list_log);